【tensorflow学习之路】构建一个简单的CNN模型进行MNIST分类

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 26, 26, 32)        320       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32)        0         
_________________________________________________________________
flatten (Flatten)            (None, 5408)              0         
_________________________________________________________________
dense (Dense)                (None, 32)                173088    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                330       
=================================================================
Total params: 173,738
Trainable params: 173,738
Non-trainable params: 0
_________________________________________________________________

要构建如上一个简单的CNN模型,利用keras包,可以很快很方便的搭建出来,对于像我这样的菜鸟新手来讲,keras确实是一种非常好用的库。
简单解释一下上面这个CNN模型

  • 输入28x28的图像,进入卷积层,相关参数为
    filters=32,kernel_size=(3,3),strides=(1,1),padding='valid',activation='relu'
    32个fileters,核大小3x3,步长1x1,padding填充为valid,激活函数ReLU
  • 然后进行maxpooling,得到13x13x32的图像
  • 接着是flatten,其作用是压平参数,13x13x32=5408,这是为了方便后面的全连接层的计算
  • 最后是两个全连接层,第一个共32个神经元,激活函数使用ReLU,第二个共10个神经元,激活函数使用softmax,10个神经元也代表从0到9的10个分类

Code:

'''**********************实现CNN进行MNIST手写识别**********************'''
'''0.载入包'''
import tensorflow as tf
import tensorflow.keras as keras
import tensorflow.keras.layers as layers
import matplotlib.pyplot as plt
'''1.载入数据 '''
(x_train,y_train),(x_test,y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape((-1,28,28,1))
x_test = x_test.reshape((-1,28,28,1))

'''2.构造模型'''
model = keras.Sequential()
model.add(layers.Conv2D(input_shape = (x_train.shape[1], x_train.shape[2], x_train.shape[3]),
                       filters=32,kernel_size=(3,3),strides=(1,1),padding='valid',activation='relu'))# 输出(28-3+2x0)/1+1=26  26x26x32
model.add(layers.MaxPool2D(pool_size=(2,2)))# maxpool,输出13x13x32
model.add(layers.Flatten())# 压平,13x13x32=5408,为了方便全连接计算
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=keras.optimizers.Adam(),
             loss=keras.losses.SparseCategoricalCrossentropy(),
            metrics=['acc'])
model.summary()

'''3.训练模型'''
history = model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.1)#0.1的比例作为验证集

'''4.评估模型'''
res = model.evaluate(x_test, y_test)
print(res)	# loss: 0.1238 - acc: 0.9705

参考资料:
1.keras文档:https://keras.io/
2.Tensorflow2教程:https://zhuanlan.zhihu.com/p/60900649

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小风_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值