1.手寫數字資料集
2.資料預處理
from sklearn.datasets importload_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...