Lenet5+minst手写体数据集(利用tensorflow2.3.1实现)
作者:互联网
笔者看了看,网上关于tensorflow的CNN模型训练好多都是基于1.0的。但tensorflow2.0是大趋势(相信很多人都会选择装2.0的tf),笔者利用的是tensorflow2.0框架实现的程序。
Lenet是啥?
minst又是啥?
笔者在此不再赘述,相信有兴趣读到我文章的都是内行(虽然我是个外行,哈哈哈啊)
话不多说,直接上代码
'''
lenet5+keras+minst数据集
encoding='utf-8'
运行环境:tensorflow2.3.1(cpu),window系统,pycharm
'''
#导包
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Flatten, Dense, Conv2D, MaxPool2D
from keras.utils import to_categorical
from keras.metrics import categorical_crossentropy
import time
#记录程序运行时间
start_time = time.clock()
#定义Lenet5模型函数
def lenet5():
#首先建立空模型
model=Sequential()
#第一层卷积层(6*5*5),激活函数用relu函数,不使用padding,input_shape为(28*28*1),步长为默认即可
model.add(Conv2D(6,kernel_size=(5,5),activation='relu',padding='valid',input_shape=(28,28,1)))
#第二层为最大池化层(2*2)
model.add(MaxPool2D(pool_size=(2,2)))
#第三层为卷积2层(16*5*5),激活函数用relu函数
model.add(Conv2D(16,kernel_size=(5,5),activation='relu'))
#第四层为最大池化2层(2*2)
model.add(MaxPool2D(pool_size=(2,2)))
#第五、六层为全连接层,第一层120个神经元;第二层为84个神经元
model.add(Flatten())
model.add(Dense(120,activation='relu'))
model.add(Dense(84,activation='relu'))
#输出层(手写数字体识别,因此为10个,激活函数为softmax)
model.add(Dense(10,activation='softmax'))
return model
#定义加载minst数据的函数
def loadingdata():
'''
x_train为训练集图像
y_train为训练集的标签(真实值)
y_train为测试集的标签(真实值)
x_test为测试集的图像
'''
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 对数据进行预处理,方便输入进去
x_train = x_train.reshape(len(x_train), 28, 28, 1) / 255
x_test = x_test.reshape(len(x_test), 28, 28, 1) / 255
# one-hot编码(因为标签是1,2,3这样的,计算机只喜欢0,1这样的编码形式,这就需要one-hot编码)
# 通俗上理解就是把(0-9)变为(0,1)这样的形式
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
return [x_train,y_train,x_test,y_test]
# 定义训练参数
batch_size_num = 100
epochs_num = 20
#加载数据
data=loadingdata()
train_img=data[0]
train_label=data[1]
test_img=data[2]
test_label=data[3]
#start training
lenetmodel=lenet5()
lenetmodel.summary()
lenetmodel.compile(loss=categorical_crossentropy,optimizer='Rmsprop',metrics=['accuracy'])
lenetmodel.fit(train_img,train_label,batch_size=batch_size_num,epochs=epochs_num,verbose=1,
validation_data=(test_img,test_label))
score=lenetmodel.evaluate(test_img,test_label)
print('final_loss= %f final_accuracy= %f'%(score[0],score[1]))
end_time=time.clock()
print('time is %0.3f s'%(end_time-start_time))
笔者是Python程序小白,代码是我一句一句手动打的,可能程序不尽如人意。希望能得到大佬的建议,将程序变得更完美。
标签:tensorflow2.3,Lenet5,28,minst,add,train,time,test,model 来源: https://blog.csdn.net/qq_44182694/article/details/110384328