前言
入门 TensorFlow 深度学习,官方网站教程是一个很好的学习材料,但教程内容主要是实例显示,缺乏对函数和对象的完整用法的深入解释,初学者经常感觉到「知其然而不知其所以然」。
我在入门学习 TensorFlow 目前还没有深度学习「知识的诅咒」,你可以从小白的角度看到这些奇怪的函数、对象和参数。本笔记系列将在官方网站教程的基础上添加必要的注释和扩展阅读材料,希望能帮助初学者 TensorFlow 有更清晰的理解。
注释将以脚注的形式添加到教程描述、代码块和操作结构中。
这个系列是按照官网教程的顺序进行的,可以作为官网教程阅读。我是小白,请轻轻喷。
系列目录:
- 《初学者的 TensorFlow 2.0 教程》
本教程来自TensorFlow官网。
这是一个“Hello, World!教程快速向初学者演示 Keras Sequential API 和model.fit。
先下载安装 TensorFlow 2.0,然后 import TensorFlow:
import tensorflow as tf
导入 MNIST 数据集注释1。将样本从整数转换为浮点数。
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
注释:
- tf.keras.datasets 提供了几个已经处理的模块 Numpy 神经网络模型的格式数据集 debug 和 demo 用。MNIST 这是一个数据集,它是一个手写数字图片的数据集,包括6万个训练样本和1万个测试样本。另一个数据集将用于后续教程 Fashion MNIST,是服装图片的数据集:
为了构建模型的每一层 tf.keras.Sequential 模型注释2,3。选择优化器和损失函数进行训练:
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, activation='softmax') ]) # 注释4,5,6 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
metrics=['accuracy']) # 注释7
注释:
-
Keras 是 TensorFlow 中的一个深度学习 API ,可以快捷地构建和训练神经网络模型。很多深度学习内容都可以使用 Keras 完成。
-
「层,layers」和「模型,models」是 Keras 的两种核心数据结构。序列模型(Sequential model)是最简单的一种模型,它由多个层通过线性堆叠构成。
-
tf.keras.layers.Flatten 是 Keras 的一系列 Reshaping 层中的一种,它的作用是将input展平。
-
tf.keras.layers.Dense 是全连接层,它的参数包括输出向量维度、激活函数等等,它可以创建权重矩阵 kernel 和偏差向量 bias,可以实现 outputs = activation(inputs * kernel + bias) 的计算。参考tf.layers.Dense。
-
Dense 层中的 activation 参数定义该全连接层所用的激活函数,可以选择的激活函数包括:ReLU、sigmoid、softmax、tanh等等。
-
model.compile 方法设置神经网络模型的编译细节,它常用参数包括优化算法 optimizer、损失函数 loss、评价标准 metrics等。这3个参数可以传入字符串或者实例化对象。上述代码所用的就是传入字符串方法。
训练并验证模型:
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test, verbose=2)
运行结果:
Epoch 1/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.2974 - accuracy: 0.9128
Epoch 2/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.1452 - accuracy: 0.9565
Epoch 3/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.1071 - accuracy: 0.9675
Epoch 4/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.0879 - accuracy: 0.9727
Epoch 5/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.0743 - accuracy: 0.9768
313/313 - 0s - loss: 0.0778 - accuracy: 0.9772 - 336ms/epoch - 1ms/step
模型最终的loss和准确率:
[0.07779313623905182, 0.9771999716758728]
现在,这个简单的照片分类器的准确度已经达到 98%。