美文网首页
Tensorflow2.0 MNIST 实践练习

Tensorflow2.0 MNIST 实践练习

作者: 烛之文 | 来源:发表于2019-12-19 20:39 被阅读0次

    1.前 言

    之前习惯了TensorFlow,也没怎么用keras。现在升级2.0版本后,语法习惯还是有很大差别,封装的更厉害。事物总是向前发展的,技术更是快,想想还是的保持一颗学习的心,准备计划系统的学习下TensorFlow2.0,边学边写。那就从mnist入门开始,后续不断更新。

    2.数据载入


     #引入包,在调用通用的cnn,rnn等模型在都keras.layers下

    import tensorflow as tf

    from tensorflow.keras import layers

    # Load mnist data

    (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

    # Normalize data,将图像的像素值都处理到[0,1]范围

    x_train = x_train.reshape(-1, 28,28,1).astype('float32') / 255

    x_test = x_test.reshape(-1, 28,28,1).astype('float32') / 255

    3.模型构建


     # Add model

    model = tf.keras.Sequential()

    # Add three convoluational layers and pool layers,使用3层卷积层和对应的最大池化层,卷积核为3,池化大小为2

    #convoluational layer1

    model.add(layers.Conv2D(input_shape=(28,28,1),filters=32,kernel_size=(3,3),kernel_initializer='he_normal',

                            strides=1,padding='same',activation='relu',name='conv1'))

    #maxpooling layer1

    model.add(layers.MaxPool2D(pool_size=(2,2),strides=1,padding='same',name='pool1'))

    #convoluational layer2

    model.add(layers.Conv2D(filters=64,kernel_size=(3,3),kernel_initializer='he_normal',

                            strides=1,padding='same',activation='relu',name='conv2'))

    #maxpooling layer2

    model.add(layers.MaxPool2D(pool_size=(2,2),strides=1,padding='same',name='pool2'))

    #convoluational layer3

    model.add(layers.Conv2D(filters=128,kernel_size=(3,3),kernel_initializer='he_normal',

                            strides=1,padding='same',activation='relu',name='conv3'))

    #maxpooling layer3

    model.add(layers.MaxPool2D(pool_size=(2,2),strides=1,padding='same',name='pool3'))

     #Add flatten ,dropout ,and FC layer,卷积池化后加一个Flatten层,然后加一个dropout,最后加一个softmax进行分类;

    model.add(layers.Flatten(name='flatten'))

    model.add(layers.Dropout(rate=0.5,name='dropout'))

    model.add(layers.Dense(10,activation='softmax'))


    4.模型编译

    # Compile model 使用交叉熵,RMSprop优化方法,评价方法按accuracy

    model.compile(loss='sparse_categorical_crossentropy',optimizer=tf.keras.optimizers.RMSprop(),metrics=['accuracy'])

    print(model.summary())

    通过model.summary()可以看到上述构建模型的概貌,以及每层的参数情况;


    5.模型训练

    #fit model,使用fit函数就可以进行模型训练,参数需要输入训练数据,训练epoch和batch_size, 其实还有其他参数,不指定就按默认的

    model.fit(x_train,y_train,epochs=5,batch_size=64)

    训练5轮,最后显示在训练集上准确率为99.3%左右,差不多跟最优的结果很近。


    6.模型测试

    #evaluate data, 使用model.evaluate函数就可以进行模型测试

    model.evaluate(x_test,y_test)

    测试的结果为98.84%


    7.结 语

    对比之前的版本,在使用TensorFlow2.0感觉就是很多步骤都用一个函数代替了,这样好处就是不用去懂里面实现的细节,只管模型能跑出结果就行;不好就是抛弃对更深层细节的理解,内心觉得之前session方式挺好的....,没办法,谁叫东西是人家的,只能跟着人家的脚步走~。

    参考:

    https://www.tensorflow.org/api_docs/python/tf

    https://zhuanlan.zhihu.com/p/58825710

    相关文章

      网友评论

          本文标题:Tensorflow2.0 MNIST 实践练习

          本文链接:https://www.haomeiwen.com/subject/hfyvnctx.html