轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)
关于 Jupyter Notebook的使用,可以参考如下链接,有详细的步骤和截图:
Jupyter Notebook神器-免费体验来自微软的Azure Notebook
基于Jupyter Notebook 快速体验Python和plot()绘图方法
基于Jupyter Notebook 快速体验matplotlib.pyplot模块中绘图方法
TensorFlow 基本分类(basic classification)演示的完整代码,可以访问:
https://notebooks.azure.com/rickiechina/projects/pythontutorial/html/Tensorflow-Tutorial.ipynb
1. 查看当前环境是否中TensorFlow 包是否已安装
!pip list | grep tensorflow
上述命令运行时间较长,请耐心等待。
pip list 命令用来查看当前环境下的Python 包,grep 命令用来查找和筛选。中间的竖线表示 pipe(管道),将pip list 命令的输出作为 grep 命令的输入。
pip 前面的感叹号是cell 中运行 Linux 命令的方式,在命令行中运行则不需要加感叹号。
上述命令的输出,表示当前环境已经安装好了 TensorFlow 包。如果没有安装,可以通过如下命令安装:
!pip install tensorflow
安装TensorFlow命令,说明如下:
# Current stable release for CPU-only
pip install tensorflow
# Preview nightly build for CPU-only (unstable)
pip install tf-nightly
# Install TensorFlow 2.0 Alpha
pip install tensorflow==2.0.0-alpha0
本地安装TensorFlow,截图如下。
TensorFlow 安装完成:
2. 导入需要的Python包
# 导入TensorFlow和tf.keras
import tensorflow as tf
from tensorflow import keras
# 导入辅助库
import numpy as np
import matplotlib.pyplot as plt
print(tf.__version__)
输出结果:1.12.2
下面训练了一个神经网络模型,来对服装图像进行分类,例如运动鞋和衬衫。需要使用tf.keras,这是一个用于在TensorFlow 中构建和训练模型的高级API。
3. 导入Fashion MNIST数据集
下面使用Fashion MNIST 数据集,其中包含了10个类别中共70,000张灰度图像。图像包含了低分辨率(28 x 28像素)的单个服装物品,图片链接如下所示:
https://github.com/zalandoresearch/fashion-mnist/blob/master/README.zh-CN.md
Fashion-MNIST是一个替代MNIST手写数字集的图像数据集。 它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供。其涵盖了来自10种类别的共7万个不同商品的正面图片。Fashion-MNIST的大小、格式和训练集/测试集划分与原始的MNIST完全一致。60000/10000的训练测试数据划分,28x28的灰度图片。可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。
MNIST是 Mixed National Institute of Standards and Technology database 的简写。
下面使用60,000张图像来训练网络和10,000张图像来评估网络模型学习图像分类任务的准确程度。
可以直接从TensorFlow 使用Fashion MNIST,只需导入并加载数据。
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
加载数据集并返回四个NumPy数组:
- train_images和train_labels数组是训练集—这是模型用来学习的数据。
- 模型通过测试集进行测试, 即test_images与 test_labels两个数组。
图像是28x28 NumPy数组,像素值介于0到255之间。labels是一个整数数组,数值介于0到9之间。
下面是图像类别和标签的对应关系:
每个图像都映射到一个标签。由于类别名称不包含在数据集中,因此把他们存储在这里以便在绘制图像时使用:
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
4. 进一步查看和分析数据
以下显示训练集中有60,000个图像,每个图像表示为28 x 28像素:
训练集中有 60000个标签,并且每个标签都是0-9 之间的整数。
测试集和训练集类似,有10000个图像和对应的10000个图像标签。
5. 数据预处理
在训练网络之前必须对数据进行预处理。 如果检查训练集中的第一个图像,将看到像素值落在0到255的范围内:
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
代码说明:
plt.figure() 创建一个新的figure。
plt.colorbar() 方法用来显示当前image 的颜色方案。
在发送到神经网络模型之前,我们将这些值缩放到0到1的范围(归一化处理)。为此,我们将像素值值除以255。重要的是,对训练集和测试集要以相同的方式进行预处理:
train_images = train_images / 255.0
test_images = test_images / 255.0
显示训练集中的前25个图像,并在每个图像下方显示类别名。验证数据格式是否正确,我们是否已准备好构建和训练网络。
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i]])
plt.show()
代码说明:
plt.xticks([])和plt.yticks([]) - 以空list 作为xticks() 方法的参数,查看数据集中图像隐藏坐标轴。
plt.xlabel() 方法可以在 x 轴的下方显示指定文本。
plt.subplot(5,5,1) 方法 - 表示5行5列共25个位置,最后一个参数1 表示Axes的位置,第一行的位置编号为:1-5,第二行的位置编号为:6-10,依此类推。
上述代码遍历了25 个位置(for i in range(25)),批量显示多张图。针对每一个位置,设置隐藏x和y轴,不显示网关线(grid),在对应的位置显示图像以及类别(label)。
需要注意的地方:Axes 位置的起始值是1,不是常见的0。
对TensorFlow 深度学习有兴趣的同学,可以访问如下链接。
未完待续,欢迎关注,欢迎交流 :)