惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 司徒正美
Last Week in AI
Last Week in AI
爱范儿
爱范儿
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
量子位
V
V2EX
博客园 - 叶小钗
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog

极客兔兔

Go sync.Cond | Go 语言高性能编程 Go 死码消除与调试(debug)模式 | Go 语言高性能编程 Go sync.Once | Go 语言高性能编程 Go 逃逸分析 | Go 语言高性能编程 2020 年终总结 | 极客兔兔 Go struct 内存对齐 | Go 语言高性能编程 Go 空结构体 struct{} 的使用 | Go 语言高性能编程 控制协程(goroutine)的并发数量 | Go 语言高性能编程 | 极客兔兔 如何退出协程 goroutine (其他场景) | Go 语言高性能编程 如何退出协程 goroutine (超时场景) | Go 语言高性能编程 Go 语言陷阱 - 数组和切片 | Go 语言高性能编程 减小 Go 代码编译后的二进制体积 | Go 语言高性能编程 Go Reflect 提高反射性能 | Go 语言高性能编程 读写锁和互斥锁的性能比较 | Go 语言高性能编程 | 极客兔兔 for 和 range 的性能比较 | Go 语言高性能编程 切片(slice)性能及陷阱 | Go 语言高性能编程 | 极客兔兔 字符串拼接性能及原理 | Go 语言高性能编程 | 极客兔兔 pprof 性能分析 | Go 语言高性能编程 benchmark 基准测试 | Go 语言高性能编程 Go 语言高性能编程 | 极客兔兔 Go 接口型函数的使用场景 | 极客兔兔 Python 简明教程 | 快速入门 | 极客兔兔 Go 语言笔试面试题(代码输出) | 极客面试 | 极客兔兔 动手写RPC框架 - GeeRPC第七天 服务发现与注册中心(registry) | 极客兔兔 动手写RPC框架 - GeeRPC第六天 负载均衡(load balance) 动手写RPC框架 - GeeRPC第五天 支持HTTP协议 | 极客兔兔 动手写RPC框架 - GeeRPC第四天 超时处理(timeout) | 极客兔兔 动手写RPC框架 - GeeRPC第三天 服务注册(service register) 动手写RPC框架 - GeeRPC第二天 支持并发与异步的客户端 | 极客兔兔 动手写RPC框架 - GeeRPC第一天 服务端与消息编码 | 极客兔兔
TensorFlow 2 中文文档 - MNIST 图像分类
2019-07-09 · via 极客兔兔

源代码/数据集已上传到 Github - tensorflow2-docs-zh

TF2.0 TensorFlow 2 / 2.0 中文文档 - 图像分类 Classify images

主要内容:使用神经网络对服饰图片进行分类。

这篇文档使用高级APItf.keras在TensorFlow中搭建和训练模型。

1
2
3
4
5
6

import tensorflow as tf
from tensorflow import keras


import numpy as np

使用 Fashion MNIST 数据集

tf2doc-ml-basic-image

Fashion Mnist数据集由70,000张黑白图片构成,每张图片大小为 28x28,由十类服饰图片构成。另一个MNIST数据集是手写数字,Fashion MNIST 与之相比更有挑战性,适合用来验证算法。

我们使用60,000张图片作为训练集,10,000张图片作为测试集。这个数据集可以从 TensorFlow 中直接获取,返回值为numpy数组。

1
2
3
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

图片大小28x28,每个像素值取值范围0-255。标签是整数,取值范围0-9,与实际的服饰类别对应关系如下。

标签 类别 标签 类别 标签 类别 标签 类别
0 T-shirt/top 3 Dress 6 Shirt 9 Ankle boot
1 Trouser 4 Coat 7 Sneaker
2 Pullover 5 Sandal 8 Bag

数据格式

1
2
3
4
5
train_images.shape 
len(train_labels)
train_labels
test_images.shape
len(test_labels)

预处理

训练之前,我们需要对数据进行预处理。图片的每个像素值在0-255之间,需要转为0-1。训练集和测试集都需要经过相同的处理。

1
2
train_images = train_images / 255.0
test_images = test_images / 255.0

搭建模型

神经网络的基本构成是网络层(layer),大部分深度学习网络都由多个简单的 layers 构成。

1
2
3
4
5
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])

网络的第一层,Flatten将输入从28x28 的二维数组转为784的一维数组,这一层的作用仅仅是将每一行值平铺在一行。

接下来是2层Dense,即全连接层(fully connected, FC),第一层Dense有128个神经元。第二层有10个神经元,经过 softmax 后,返回了和为1长度为10的概率数组,每一个数分别代表当前图片属于分类0-9的概率。

编译模型

模型准备训练前,在模型编译(Compile)时还需要设置一些参数。

  • Loss function - 损失函数,训练时评估模型的正确率,希望最小化这个函数,往正确的方向训练模型。
  • Optimizer - 优化器算法,更新模型参数的算法。
  • Metrics - 指标,用来监视训练和测试步数,下面的例子中使用accuracy,即图片被正确分类的比例。
1
2
3
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

训练模型

训练神经网络,通常有以下几个步骤。

  • 传入训练数据,train_imagestrain_labels
  • 训练模型去关联图片和标签。
  • 模型对测试集test_images作预测,并用test_labels验证预测结果。

使用model.fit函数开始训练。

1
model.fit(train_images, train_labels, epochs=10)
1
2
3
4
5
6
7
8
Train on 60000 samples
Epoch 1/10
60000/60000 [========] - 4s 70us/sample - loss: 0.5032 - accuracy: 0.8234
Epoch 2/10
60000/60000 [========] - 4s 64us/sample - loss: 0.3793 - accuracy: 0.8618
...
Epoch 10/10
60000/60000 [========] - 4s 66us/sample - loss: 0.2389 - accuracy: 0.9115

最终达到了88%左右的准确率。

评估准确率

接下来,看看在测试集中表现如何?

1
2
3
4
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('\nTest accuracy:', test_acc)


测试集的准确率低于训练集,训练集和测试集准确率之间的差距代表模型_过拟合_(overfitting)。即对于训练中没有见过的新数据,模型表现差。

预测

使用predict函数进行预测。

1
2
predictions = model.predict(test_images)
predictions[0]

看下第一张图片的预测结果。

1
2
array([1.06-05, 5.06-12, 8.44-08, 4.09-09, 2.87-07, 2.28-04, 
6.18-06, 2.48-02, 3.81-06, 9.74-01], dtype=float32)

每次预测返回长度为10的数组,代表属于每一种分类的可能性,最大可能性的label是9。测试集中的数据也是9,预测正确。

1
2
np.argmax(predictions[0]) 
test_labels[0]

返回文档首页

参考地址:Train your first neural network: basic classification

附 推荐



上一篇 « TensorFlow 2 / 2.0 中文文档 下一篇 » TensorFlow 2 中文文档 - IMDB 文本分类

© 2026 - 极客兔兔 - 沪ICP备18001798号-1

👁   📚