15 手寫數字識別 小資料集

2022-04-26 08:06:42 字數 3291 閱讀 1161

1.手寫數字資料集

from sklearn.datasets import

load_digits

digits = load_digits()

2.資料預處理

**:

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

scale =minmaxscaler()

x_data = scale.fit_transform(x_data) #

歸一化x = x_data.reshape(-1,8,8,1)

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

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

熱獨編碼

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,y_train.shape,y_test.shape)

結果:

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

**:

#

建立模型

model =sequential()

#一層卷積

model.add(

conv2d(

filters=16, #

卷積核種類

kernel_size=(3, 3), #

卷積核大小

padding='

same',

input_shape=x_train.shape[1:],

activation='

relu'))

#池化層1

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

model.add(dropout(0.25)) #

隨機丟棄1/4,防止過擬合

#二層卷積

model.add(

conv2d(

filters=32,

kernel_size=(3, 3),

padding='

same',

activation='

relu'))

#池化層2

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

model.add(dropout(0.25))

#三層卷積

model.add(

conv2d(

filters=64,

kernel_size=(3, 3),

padding='

same',

activation='

relu'))

#四層卷積

model.add(

conv2d(

filters=128,

kernel_size=(3, 3),

padding='

same',

activation='

relu'))

#池化層3

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))

model.add(dense(10, activation='

softmax

')) #

啟用函式

model.summary()

結果:

設計說明:

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=256,

epochs=80,

verbose=2)

結果:

5.模型評價

**:

#

模型評價

score =model.evaluate(x_test,y_test)

print

(score)

#**值

y_pred =model.predict_classes(x_test)

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

y_test2 =np.array(y_test1)[0]

#交叉表

import

pandas as pd

pd.crosstab(y_test2,y_pred,rownames=['

labels

'],colnames=['

predict'])

#交叉矩陣

import

seaborn as sns

import

pandas as pd

y_test1 =y_test1.tolist()[0]

a = pd.crosstab(np.array(y_test1), y_pred, rownames=['

lables

'], colnames=['

predict'])

#轉換成屬dataframe

df =pd.dataframe(a)

sns.heatmap(df, annot=true, cmap="

ylgn

", linewidths=0.2, linecolor='g'

)plt.show()

結果:

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...

15 手寫數字識別 小資料集

1.手寫數字資料集 2.資料預處理 from sklearn.datasets import load digits from sklearn.preprocessing import minmaxscaler from sklearn.preprocessing import onehotenco...