Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YiRan_17
Python专题
提交
0e7b5e83
Python专题
项目概览
YiRan_17
/
Python专题
与 Fork 源项目一致
Fork自
GitCode官方 / Python专题
通知
2
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Python专题
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0e7b5e83
编写于
7月 20, 2021
作者:
M
MaoXianxin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tf2_quickstart_for_beginners
上级
624c11ba
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
467 addition
and
0 deletion
+467
-0
TensorFlow 2 quickstart for beginners.md
TensorFlow 2 quickstart for beginners.md
+101
-0
tf2_quickstart_for_beginners.ipynb
tf2_quickstart_for_beginners.ipynb
+366
-0
未找到文件。
TensorFlow 2 quickstart for beginners.md
0 → 100644
浏览文件 @
0e7b5e83
本次教程的目的是快速带领初学者入门以及使用 Tensorflow 2 ,一共分为以下 3 个知识点:
1.
搭建一个神经网络用于图片分类
2.
训练搭建好的神经网络
3.
对训练好的网络模型进行准确率评估
首先我们需要 Import 用到的函数库
```
import numpy as np
import tensorflow as tf
```
加载 MNIST 数据集,该数据集相当于编程界的 "Hello, World" ,然后把样本的数据类型从 int 转化成 float
```
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
```
如下图所示,我们可以看到加载上来的数据集的数据类型为 uint8 ,取值范围是 0-255 ,对应了图片的像素值 0-255
![](
https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210720112034.png
)
转化之后,如下图所示,变成了 float64
![](
https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210720112116.png
)
接下来我们进入模型搭建阶段,用的是 Sequential API ,同时我们还需要选择优化器和损失函数以用于训练
```
model
=
tf
.
keras
.
models
.
Sequential
([
tf
.
keras
.
layers
.
Flatten
(
input_shape
=(
28
,
28
)),
tf
.
keras
.
layers
.
Dense
(
128
,
activation
=
'relu'
),
tf
.
keras
.
layers
.
Dropout
(
0.2
),
tf
.
keras
.
layers
.
Dense
(
10
)
])
loss_fn
=
tf
.
keras
.
losses
.
SparseCategoricalCrossentropy
(
from_logits
=
True
)
model
.
compile
(
optimizer
=
'adam'
,
loss
=
loss_fn
,
metrics
=[
'accuracy'
])
```
注解: 针对上面模型搭建阶段,为什么不把
`tf.nn.softmax`
放入最后一层
`Dense`
的原因是,当使用 softmax 输出时,不可能为所有模型提供精确和数值稳定的损失计算
到这一步,我们就可以开始训练模型了
```
model.fit(x_train, y_train, epochs=5)
```
训练完模型之后,我们还需要对模型的准确率进行评估
```
model.evaluate(x_test, y_test, verbose=2)
```
最后我们对测试集的 5 张图片进行预测,看看模型是否真的学会图片分类了
```
probability_model = tf.keras.Sequential([
model,
tf.keras.layers.Softmax()
])
print(np.argmax(probability_model(x_test[:5]), axis=1))
print(y_test[:5])
```
一般来说,预测结果和标签是能够一一对应上的
一些补充:
1.
我们可以测试一下模型在未训练前的输出
2.
我们可以测试一下模型在训练后的输出
## 模型在未训练前的输出
![](
https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210720121724.png
)
上图展示的是,模型未训练前,计算出来的损失值,这背后有什么奥秘呢?
首先我们要知道一点,MNIST 有 0-9 ,10 个数字,也就是 10 分类问题,未训练的模型对于每个类别预测正确的概率是 1/10 ,然后损失值计算公式是:
`-tf.math.log(1/10) ~= 2.3`
和我们这里的 2.68 输出非常近似
![](
https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210720122113.png
)
接下来我们输出一下模型未训练状态下的预测结果,可以看到 2/20=1/10 的正确率,基本符合随机预测的概率(当然这里统计的样本数过少,定义不够严谨)
## 模型在训练后的输出
![](
https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210720122332.png
)
我们看到 evaluate 的输出是
`[0.07140578329563141, 0.9786999821662903]`
前者是损失值,后者是准确率,我们发现经过 epoch=5 次迭代,模型在测试集上取得了 97.86% 的准确率
![](
https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210720122251.png
)
上图是对测试集的前 5 张图片进行预测,可以看到预测结果均正确
\ No newline at end of file
tf2_quickstart_for_beginners.ipynb
0 → 100644
浏览文件 @
0e7b5e83
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录