15 手寫數字識別 小資料集

2022-08-28 23:45:23 字數 4352 閱讀 4158

1.手寫數字資料集

2.資料預處理

from sklearn.datasets import

load_digits

from sklearn.preprocessing import

minmaxscaler

from sklearn.preprocessing import

onehotencoder

import

numpy as np

from sklearn.model_selection import

train_test_split

import

matplotlib.pyplot as plt

digits=load_digits() #

獲取資料集

x_data=digits.data.astype(np.float32)#

樣本資料

print("

樣本資料:\n

",x_data)

#對x歸一化處理minmaxscaler()

scaler=minmaxscaler()

x_data=scaler.fit_transform(x_data)

print("

歸一化後處理後的樣本資料:\n

",x_data)

y_data=digits.target.astype(np.float32).reshape(-1,1)#

將y_data變為一列

print("

樣本標籤:\n

",y_data)

#對y進行獨熱編碼onehotencoder()

y=onehotencoder().fit_transform(y_data).todense()

print("

獨熱編碼後的樣本標籤:\n

",y)

#

轉換為的格式

x=x_data.reshape(-1,8,8,1)

#訓練集測試集劃分

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0,stratify=y)

print('

訓練集資料:

',x_train.shape,'

測試集資料:

',x_test.shape)

print('

\n訓練集標籤:

',y_train.shape,'

測試集標籤:

3.設計卷積神經網路結構

#建立模型

model =sequential()

#c1卷積層

model.add(

conv2d(

filters=16,#

輸出空間的維度

kernel_size=(5, 5),#

卷積核大小

padding='

same

',#填充邊界

input_shape=x_train.shape[1:],

activation='

relu'))

#s2池化層

model.add(maxpool2d(pool_size=(2, 2)))

#drop層(防止過擬合)

model.add(dropout(0.25))

#c3卷積層

model.add(

conv2d(

filters=32,

kernel_size=(5, 5),

padding='

same',

activation='

relu'))

#s4池化層

model.add(maxpool2d(pool_size=(2, 2)))

model.add(dropout(0.25))

#c5卷積層

model.add(

conv2d(

filters=64,

kernel_size=(5, 5),

padding='

same',

activation='

relu'))

#c6卷積層

model.add(

conv2d(

filters=128,

kernel_size=(5, 5),

padding='

same',

activation='

relu'))

#s7池化層

model.add(maxpool2d(pool_size=(2, 2)))

model.add(dropout(0.25))

#平坦層

model.add(flatten())

#全連線層

model.add(dense(128, activation='

relu'))

model.add(dropout(0.25))

#啟用函式

4.模型訓練

#

模型訓練

model.compile(loss='

categorical_crossentropy

', optimizer='

adam

', metrics=['

accuracy'])

train_history = model.fit(x=x_train,y=y_train,

validation_split=0.2,

batch_size=300,#

每次訓練的資料量

epochs=10,#

訓練迭代次數

5.模型評價

#

模型評價

score =model.evaluate(x_test,y_test)

print("

模型評價:

",score)

#**值

y_pred=model.predict_classes(x_test)

print("

**值:

",y_pred)

#交叉矩陣檢視**資料與原資料對比

import

pandas as pd

import

seaborn as sns

#標籤數值化

y_test1=np.argmax(y_test,axis=1).reshape(-1)

y_ture=np.array(y_test1[0]).reshape(-1)

a=pd.crosstab(y_ture,y_pred,rownames=['

lables

'],colnames=['

predict'])

#轉換為資料框

df=pd.dataframe(a)

#繪製熱力圖

15 手寫數字識別 小資料集

1.手寫數字資料集 from sklearn.datasets import load digits digits load digits 2.資料預處理 x data digits.data.astype np.float32 scale minmaxscaler x data scale.fit...

15 手寫數字識別 小資料集

1.手寫數字資料集 from sklearn.datasets import load digits digits load digits 2.資料預處理 3.設計卷積神經網路結構 4.模型訓練 訓練模型 import matplotlib.pyplot as plt model.compile l...

15 手寫數字識別 小資料集

1.手寫數字資料集 2.資料預處理 3.設計卷積神經網路結構 設計卷積神經網路結構 model sequential ks 3,3 卷積核的大小 input shape x train.shape 1 model.add conv2d filters 16,kernel size ks,paddin...