1.手寫數字資料集
#匯入手寫數字資料集2.資料預處理from sklearn.datasets import load_digits
import numpy as np
digits = load_digits()
# 歸一化minmaxscaler()from sklearn.preprocessing import minmaxscaler
x_data = digits.data.astype(np.float32)
scaler = minmaxscaler()
x_data = scaler.fit_transform(x_data)
print("歸一化後",x_data)
# 轉化為的格式
獨熱編碼:
# 獨熱編碼from sklearn.preprocessing import onehotencoder
# y = digits.target.reshape(-1,1)
#將y_data變為一列
y = digits.target.astype(np.float32).reshape(-1,1)
y = onehotencoder().fit_transform(y).todense() #張量結構todense
print("獨熱編碼:",y)
# 切分資料集
3.設計卷積神經網路結構
from tensorflow.keras.models import sequentialfrom tensorflow.keras.layers import dense,dropout,conv2d,maxpool2d,flatten
#3、建立模型
model = sequential()
ks = (3, 3) # 卷積核的大小
input_shape = x_train.shape[1:]
# 一層卷積,padding='same',tensorflow會對輸入自動補0
model.add(conv2d(filters=16, kernel_size=ks, padding='same', input_shape=input_shape, activation='relu'))
# 池化層1
model.add(maxpool2d(pool_size=(2, 2)))
# 防止過擬合,隨機丟掉連線
model.add(dropout(0.25))
# 二層卷積
model.add(conv2d(filters=32, kernel_size=ks, padding='same', activation='relu'))
# 池化層2
model.add(maxpool2d(pool_size=(2, 2)))
model.add(dropout(0.25))
# 三層卷積
model.add(conv2d(filters=64, kernel_size=ks, padding='same', activation='relu'))
# 四層卷積
model.add(conv2d(filters=128, kernel_size=ks, 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))
# 啟用函式softmax
4.模型訓練
import matplotlib.pyplot as plt# 畫圖
def show_train_history(train_history, train, validation):
plt.plot(train_history.history[train])
plt.plot(train_history.history[validation])
plt.title('train history')
plt.ylabel('train')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()
# 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, verbose=2)
# 準確率
show_train_history(train_history, 'accuracy', 'val_accuracy')
# 損失率
5.模型評價
import pandas as pdimport seaborn as sns
# model.evaluate()
score = model.evaluate(x_test, y_test)
print('score:', score)
# **值
y_pred = model.predict_classes(x_test)
print('y_pred:', y_pred[:10])
# 交叉表與交叉矩陣
y_test1 = np.argmax(y_test, axis=1).reshape(-1)
y_true = np.array(y_test1)[0]
# 交叉表檢視**資料與原資料對比
# pandas.crosstab
pd.crosstab(y_true, y_pred, rownames=['true'], colnames=['predict'])
# 交叉矩陣
# seaborn.heatmap
y_test1 = y_test1.tolist()[0]
a = pd.crosstab(np.array(y_test1), y_pred, rownames=['lables'], colnames=['predict'])
# 轉換成屬dataframe
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...