我是靠谱客的博主 愤怒西牛,这篇文章主要介绍用TensorFlow搭建卷积神经网络识别数字0~9,现在分享给大家,希望可以做个参考。

入门深度学习,用TensorFlow搭建卷积神经网络识别数字0~9,采用mnist数据集,参考了其它两三篇博客的内容。
一些相关内容我写在代码注释里面了:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers, optimizers, datasets # 下面一行是在线加载方式获取mnist数据 # mnist = tf.keras.datasets.mnist # 下面两行是加载本地的数据集(提前从网上下载好) datapath = r'F:MyDownloadsPyCharm 5.0.3mnist.npz' (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(datapath) # 数据预处理,原来x_train是60000*28*28的数据 # 处理之后x_train是60000*28*28*1的数据(黑白单通道) # y_train是0~9 x_train = x_train.reshape(x_train.shape[0],28,28,1).astype('float32') x_test = x_test.reshape(x_test.shape[0],28,28,1).astype('float32') # 归一化 x_train = tf.keras.utils.normalize(x_train, axis=1) x_test = tf.keras.utils.normalize(x_test, axis=1) ''' 建立卷积神经网络结构模型: 建立两层卷积层和两层池化层 第一层卷积核个数为16,大小为5*5,same的填充是指输出图像大小与输入一致 第二层卷积核个数为36,以提取更高维度的信息,大小为5*5 一般来说,最大池化层比平均池化层在分类上表现更好 卷积——>ReLU——>池化(以上3层可以叠加多层)——>全连接(可以叠加多层) 一个卷积核可以提取图像的部分特征,选取若干个卷积核。 反向传播:计算卷积核的参数和全连接的权重 ''' ''' Sequential用于建立序列模型 Flatten层展开张量,把feature map都展开 Dense层是全连接层,输出128个神经元,激活函数用relu Dropout层使用0.5的失活率 再来一个全连接层,输出10个神经元(对应0~9),激活函数使用softmax,得到对各个类别预测的概率 ''' model = keras.models.Sequential([ layers.Conv2D(filters=16, kernel_size=(5,5), padding='same', input_shape=(28,28,1), activation='relu'), layers.MaxPooling2D(pool_size=(2, 2)), layers.Conv2D(filters=36, kernel_size=(5,5), padding='same', activation='relu'), layers.MaxPooling2D(pool_size=(2, 2)), layers.Dropout(0.25), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dropout(0.5), layers.Dense(10,activation='softmax') ]) #打印模型 print(model.summary()) #模型编译及训练 #损失函数使用交叉熵损失函数,优化器使用adam,训练10个epoch和128的batch_size ''' 随机梯度下降: batch:更新内部模型参数之前处理的样本数,训练数据集可以划分成一个或者多个batch 1个epoch:训练数据集中的所有样本都有机会参与更新内部模型参数,epoch由一个或者多个batch组成 小例子: 训练数据集有200个样本,令batch_size=5,即每个batch有5个样本,则有40个batch。 处理完一个batch的5个样本之后,更新内部模型参数。 1个epoch由40个batch组成,执行完一次epoch,参数更新40次。 epoch数量一般比较大,允许算法运行直到模型的误差非常小 ''' #训练配置 model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) #开始训练 model.fit(x=x_train, y=y_train, validation_split=0.2, # validation_split是指将一部分作为验证集使用,0.2代表80%的数据作为训练集,20%作为验证集 epochs=10, batch_size=128, verbose=1) # verbose=1代表显示训练过程 # 测试集验证来评估模型,model.evaluate输出计算的损失值和准确度 val_loss, val_acc = model.evaluate(x_test, y_test) print('Test Loss:{:.6f}'.format(val_loss)) print('Test Acc:{:.6f}'.format(val_acc)) ''' # 绘制图像,查看loss和accr import matplotlib.pyplot as plt history = model.fit(...) plt.plot(history.epoch,history.history['loss'],color='red',label='loss') plt.plot(history.epoch,history.history['accr'],color='blur',label='accr') plt.legend() plt.show() '''

最后

以上就是愤怒西牛最近收集整理的关于用TensorFlow搭建卷积神经网络识别数字0~9的全部内容,更多相关用TensorFlow搭建卷积神经网络识别数字0~9内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部