美文网首页
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