深度学习 - Keras搭建神经网络图片数字

唉!!!这些大佬,写个LSTM每一个人的实现方法都不一样,有用Keras,TF,Pytorch等,可怜我啥时候才能看懂那篇论文的代码啊!!!!

引言

如果 用 tensorflow 来搭建神经网络,我们还需要下一些功夫,而使用keras 我们就省心了,提供高级的 API 供我们使用来搭建神经网络,keras 也走进了谷歌的大门,keras 也被整合到 tensorflow 方便我们使用。

定义模型样子

这里说一下mnist是一个用到烂的数据集
在这里插入图片描述

# %pip install tensorflow
import tensorflow as tf
mnist = tf.keras.datasets.mnist # 28 x 28 images of hand-written digits 0-9
#加载数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
#### 可视化数据

通过 keras.datasets 导入手写数字集,用于我们学习如何搭建神经网络来识别图中数字

import matplotlib.pyplot as plt
plt.imshow(x_train[0])
print(x_train[0])

在这里插入图片描述
使用 matplotlib 库可以将数据可视化,让我们更加直观地了解图片数据到底是什么。

plt.imshow(x_train[0],cmap=plt.cm.binary)

在这里插入图片描述

x_train = tf.keras.utils.normalize(x_train,axis = 1)
x_test = tf.keras.utils.normalize(x_test, axis = 1)

我们可以对数据通过处理将数据映射到 1 - 0 区间,这样更便于处理。在这里插入图片描述在这里插入图片描述开始搭建我们神经网络

model = tf.keras.models.Sequential()

这里我们使用 Sequential 创建顺序执行执行神经网络。

# add layer first layer is input layer
model.add(tf.keras.layers.Flatten())

首先将多维数据压缩为一维数据,作为输入数据。Dense 表示一个全连接的层,这也就是我们要添加一个输出 128 的全连接层。然后activation 可以指定激活函数。

model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))

添加两个神经层,因为每一层输入都是 128 而且激活函数使用简单的 relu,relu 相比其他激活函数计算简单。

model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))

接下来评价我们模型,可以指定 loss 函数类型,训练模型就是找到最合适方程,可以在 optimizer 指定找到最合适函数的方式。

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

model.fit(x_train,y_train,epochs=3)

开始训练,第一个参数为训练集,y_train 为期望值,x_train 是二维数组,一维是训练集样本数量,第二个维度是图片大小,28 * 28 = 784。对于 y_train 的第一个维度就是样本的数量,第二个就是 10 维,因为我们图片是分为 10 类。
图

其实这里还有参数batch_size 指定数量,这样 keras 是根据 batch_size 将数据进行划分,然后在 batch_size 计算出 loss 函数得到然后根据 loss 函数(损失函数)结构调整一次参数依次类推,每一个 batch 都会根据loss 函数来更新参数

解析

batch_size:整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。
epochs:整数,训练终止时的epoch值,训练将在达到该epoch值时停止,当没有设置initial_epoch时,它就是训练的总轮数,否则训练的总轮数为epochs - inital_epoch

在这里插入图片描述
在这里插入图片描述

然后每完成一次所有 batch 运算就算为 epoch
在这里插入图片描述
输出一个 loss

(0.11153460214892402, 0.9629)

然后就可以检查一下我们训练成果了,我们可以将训练好模型保存起来,以便以后可以无需重复训练通过加载训练好的模型,来进行图形识别。

model.save('epic_num_reader.model')
new_model = tf.keras.models.load_model('epic_num_reader.model')
predictions = new_model.predict([x_test])
print(predictions)

模型保存这一步很重要
我之前一直以为在线上模型使用每次都要fit一下,显然不是的。sava model
从结果来看我们训练出的模型可以满足我们需要,模型已经成功根据图片

7

通过我们测试模型现在已经可以识别出数字 7

一个demo下来,发现很多框架细节都不懂,真的得一个个参数去看了!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值