15 手写数字识别

补缴作业:

 

2.机器学习相关数学基础

https://www.cnblogs.com/SZZZ/p/13126836.html

4.K均值算法--应用

https://www.cnblogs.com/SZZZ/p/13126782.html

5.线性回归算法

https://www.cnblogs.com/SZZZ/p/13126734.html

8、特征选择

https://www.cnblogs.com/SZZZ/p/13126701.html

12.朴素贝叶斯-垃圾邮件分类

https://www.cnblogs.com/SZZZ/p/13126609.html

13-垃圾邮件分类2

https://www.cnblogs.com/SZZZ/p/13126689.html

 

原因:因为我奶奶在网课开始的那个星期中风了,需要有人没日没夜照顾,我负责守夜。追究到底,还是我时间没有运用好,导致拖欠老师的作业,实属不对,望老师原谅,酌情给分。

 

1.手写数字数据集

  • from sklearn.datasets import load_digits
  • digits = load_digits()
from sklearn.datasets import load_digits
import numpy as np
digits = load_digits()
x_data = digits.data.astype(np.float32)
y_data = digits.target.astype(np.float32).reshape(-1, 1)

2.图片数据预处理

  • x:归一化MinMaxScaler()
  • y:独热编码OneHotEncoder()或to_categorical
  • 训练集测试集划分
  • 张量结构
    from sklearn.preprocessing import MinMaxScaler
    import numpy as np
    X_data = digits.data.astype(np.float32) # 转换为32位浮点数
    scaler = MinMaxScaler()
    X_data = scaler.fit_transform(X_data) # 归一化处理
    X = X_data.reshape(-1,8,8,1) # 转为图片的格式
    X.shape # 查看归一化后的数据大小

   

Y_data = digits.target.astype(np.float32).reshape(-1,1) # 将Y_data变为一列
from sklearn.preprocessing import OneHotEncoder
Y = OneHotEncoder().fit_transform(Y_data).todense()     # 对数据进行独热编码
print(Y)   #查看独热编码后的数据

 

  15 手写数字识别_第1张图片

 

 

3.设计卷积神经网络结构

  • 绘制模型结构图,并说明设计依据。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D
import matplotlib.pyplot as plt
# 3.设计卷积神经网络结构
# 建立模型
model = Sequential()
ks = [3, 3]  # 卷积核
# 一层卷积
model.add(Conv2D(filters=16, kernel_size=ks, padding='same', input_shape=x_train.shape[1:], activation='relu'))
# 池化层
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
# 二层卷积
model.add(Conv2D(filters=32, kernel_size=ks, padding='same', activation='relu'))
# 池化层
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'))
# 池化层
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()

15 手写数字识别_第2张图片

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)

15 手写数字识别_第3张图片

5.模型评价

  • model.evaluate()
  • 交叉表与交叉矩阵
  • pandas.crosstab
  • seaborn.heatmap

15 手写数字识别_第4张图片

 

 15 手写数字识别_第5张图片

 

 15 手写数字识别_第6张图片

 

 15 手写数字识别_第7张图片

 

你可能感兴趣的:(15 手写数字识别)