卷积神经网络:LeNet-5网络
时间:2023-2-27 23:35 作者:wen 分类: AI
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
import matplotlib.pyplot as plt
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.layers import Conv2D, AveragePooling2D, Flatten
# 获取训练数据和测试数据
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
# 参数1 训练集的第一个样本数据
# cmap 绘图模式为:灰度图(gray)
plt.imshow(X_train[0], cmap='gray')
plt.show()
# 参数1 测试样本书
# 参数2 参数3 图片宽高
# 参数4 通道数(红蓝绿)
X_train = X_train.reshape(60000, 28, 28, 1) / 255.0
X_test = X_test.reshape(10000, 28, 28, 1) / 255.0
# 数据类型转换
Y_train = to_categorical(Y_train, 10)
Y_test = to_categorical(Y_test, 10)
model = Sequential()
# filters 卷积核数量,过滤器数量
# kernel_size 卷积核尺寸
# strides 步长
# input_shape 输入的形状
# padding 填充模式 (same,valid)
# activation 激活函数
model.add(Conv2D(filters=6, kernel_size=(5, 5), strides=(1, 1), input_shape=(28, 28, 1), padding='valid', activation='relu'))
# 二维平均池化层
model.add(AveragePooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=16, kernel_size=(5, 5), strides=(1, 1), padding='valid', activation='relu'))
model.add(AveragePooling2D(pool_size=(2, 2)))
# 数据平铺
model.add(Flatten())
# 全链接层
model.add(Dense(units=120, activation='relu'))
model.add(Dense(units=84, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
# loss 代价函数 mean_squared_error (均方误差) categorical_crossentropy(多分类交叉熵代价函数)
# optimizer 优化器 sgd(随机梯度下降算法)
# metrics 评估标准 accuracy(准确度)
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.05), metrics=['accuracy'])
# epochs 训练回合数
# batch_size 训练批数量
model.fit(X_train, Y_train, epochs=20, batch_size=4096)
loss, accuracy = model.evaluate(X_test, Y_test)
print('loss' + str(loss))
print('accuracy' + str(accuracy))