轻松体验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

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

1. 查看当前环境是否中TensorFlow 包是否已安装

!pip list | grep tensorflow

上述命令运行时间较长,请耐心等待。

pip list 命令用来查看当前环境下的Python 包,grep 命令用来查找和筛选。中间的竖线表示 pipe(管道),将pip list 命令的输出作为 grep 命令的输入。

pip 前面的感叹号是cell 中运行 Linux 命令的方式,在命令行中运行则不需要加感叹号。

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

上述命令的输出,表示当前环境已经安装好了 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 第一个神经网络:基本分类(Part 1)

TensorFlow 安装完成:

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

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()

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

加载数据集并返回四个NumPy数组:

  • train_images和train_labels数组是训练集—这是模型用来学习的数据。
  • 模型通过测试集进行测试, 即test_images与 test_labels两个数组。

图像是28x28 NumPy数组,像素值介于0到255之间。labels是一个整数数组,数值介于0到9之间。

下面是图像类别和标签的对应关系:

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

每个图像都映射到一个标签。由于类别名称不包含在数据集中,因此把他们存储在这里以便在绘制图像时使用:

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

4. 进一步查看和分析数据

以下显示训练集中有60,000个图像,每个图像表示为28 x 28像素:

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

训练集中有 60000个标签,并且每个标签都是0-9 之间的整数。

测试集和训练集类似,有10000个图像和对应的10000个图像标签。

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

5. 数据预处理

在训练网络之前必须对数据进行预处理。 如果检查训练集中的第一个图像,将看到像素值落在0到255的范围内:

plt.figure()

plt.imshow(train_images[0])

plt.colorbar()

plt.grid(False)

plt.show()

轻松体验TensorFlow 第一个神经网络:基本分类(Part 1)

代码说明:

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 第一个神经网络:基本分类(Part 1)

对TensorFlow 深度学习有兴趣的同学,可以访问如下链接。

未完待续,欢迎关注,欢迎交流 :)

相关推荐