Tensorflow2(预课程)---5.3.2、手写数字识别-层方式-卷积神经网络-LeNet-5稍改
Tensorflow2(预课程)---5.3.2、手写数字识别-层方式-卷积神经网络-LeNet-5稍改
一、总结
一句话总结:
对LeNet稍微改变,改变激活函数为Relu,加上dropout层,50epoch测试集准确率有99.4+,多训练,准确率会更高
# 用到卷积神经网络的时候,需要把训练和测试的x的颜色通道数指出来 train_x = tf.reshape(train_x,[-1,28,28,1]) test_x = tf.reshape(test_x,[-1,28,28,1]) # 构建容器 model = tf.keras.Sequential() # LeNet model.add(tf.keras.layers.Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform')) model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2))) model.add(tf.keras.layers.Dropout(0.5)) # dropout层 model.add(tf.keras.layers.Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform')) model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2))) model.add(tf.keras.layers.Dropout(0.5)) # dropout层 # 全连接层 model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(512,activation='relu')) model.add(tf.keras.layers.Dense(256,activation='relu')) model.add(tf.keras.layers.Dense(128,activation='relu')) # 输出层 model.add(tf.keras.layers.Dense(10,activation='softmax')) # 模型的结构 model.summary()
二、手写数字识别-层方式-卷积神经网络-LeNet-5稍改
博客对应课程的视频位置:
步骤
1、读取数据集
2、拆分数据集(拆分成训练数据集和测试数据集)
3、构建模型
4、训练模型
5、检验模型
需求
手写数字识别
In [1]:
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
1、读取数据集
直接从tensorflow的dataset来读取数据集即可
In [2]:
(train_x, train_y), (test_x, test_y) = tf.keras.datasets.mnist.load_data()
print(train_x.shape, train_y.shape)
In [3]:
plt.imshow(train_x[0])
plt.show()
In [4]:
plt.figure()
plt.imshow(train_x[1])
plt.figure()
plt.imshow(train_x[2])
plt.show()
In [5]:
print(test_y)
In [6]:
# 像素值 RGB
np.max(train_x[0])
Out[6]:
2、拆分数据集(拆分成训练数据集和测试数据集)
上一步做了拆分数据集的工作
In [7]:
# 图片数据如何归一化
# 直接除255即可
train_x = train_x/255.0
test_x = test_x/255.0
In [8]:
# 像素值 RGB
np.max(train_x[0])
Out[8]:
In [9]:
train_y = tf.one_hot(train_y, depth=10)
test_y = tf.one_hot(test_y, depth=10)
print(test_y.shape)
3、构建模型
In [10]:
# 用到卷积神经网络的时候,需要把训练和测试的x的颜色通道数指出来
train_x = tf.reshape(train_x,[-1,28,28,1])
test_x = tf.reshape(test_x,[-1,28,28,1])
# 构建容器
model = tf.keras.Sequential()
# LeNet
model.add(tf.keras.layers.Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))
model.add(tf.keras.layers.Dropout(0.5)) # dropout层
model.add(tf.keras.layers.Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))
model.add(tf.keras.layers.Dropout(0.5)) # dropout层
# 全连接层
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512,activation='relu'))
model.add(tf.keras.layers.Dense(256
