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方式挺好的....,没办法,谁叫东西是人家的,只能跟着人家的脚步走~。
参考:
网友评论