ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Lenet5+minst手写体数据集(利用tensorflow2.3.1实现)

2020-11-30 12:32:18  阅读:206  来源: 互联网

标签:tensorflow2.3 Lenet5 28 minst add train time test model


笔者看了看,网上关于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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有