Tensorflow 2 当场抓获官方教程

0. 写在前面

本教程内容与Tensorflow 2 官方教程没什么区别,区别大概就是作者做了个翻译然后加了点自己的理解粑,也就是将官方教程——
在这里插入图片描述

1. 最简单的教程

这个简短的教程将教会你:

  • 创建一个用于图像分类的神经网络
  • 训练这个神经网络
  • 评估模型的准确度

首先导入TensorFlow:

import tensorflow as tf

载入MNIST数据集,并查看数据集的基本信息:

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

print(type(x_train))  # <class 'numpy.ndarray'>

print(x_train.shape)  # (60000, 28, 28)
print(y_train.shape)  # (60000,)
print(x_test.shape)  # (10000, 28, 28)
print(y_test.shape)  # (10000,)

print(x_train.min(), x_train.max())  # 0 255
print(y_train.min(), y_train.max())  # 0 9
print(x_test.min(), x_test.max())  # 0 255
print(y_test.min(), y_test.max())  # 0 9

将样本数据从整数转换成0~1的小数:

x_train, x_test = x_train / 255.0, x_test / 255.0

将各个层堆叠起来创建Sequential模型:

model = tf.keras.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),
])

通过模型预测一个样本:

sample = x_train[:1]
sample.shape
''' (1, 28, 28) '''

predictions = model(sample)
predictions
'''
<tf.Tensor: shape=(1, 10), dtype=float32, numpy=
array([[ 0.0655466 ,  0.5331823 , -0.3338868 ,  0.28012255, -0.313728  ,
        -0.5673277 , -0.19933444,  0.16807592, -0.21235606, -0.33416414]],
      dtype=float32)>
'''

使用softmax函数将其转换为概率值(0~1):

tf.nn.softmax(predictions)
'''
<tf.Tensor: shape=(1, 10), dtype=float32, numpy=
array([[0.11080548, 0.17686947, 0.07431723, 0.13732526, 0.07583057,
        0.05884471, 0.08502074, 0.12276912, 0.08392081, 0.07429662]],
      dtype=float32)>
'''

为了验证其是不是概率,进行求和,看看是否等于1:

prob = tf.nn.softmax(predictions)
tf.reduce_sum(prob)
''' <tf.Tensor: shape=(), dtype=float32, numpy=1.0> '''

注:理论上来说可以把softmax作为最后一层的激活函数,尽管这样可以使输出结果更直观(是概率的形式),但是一般不会这么做,因为使用softmax输出的话不可能对所有模型都取得准确的和数字上稳定的损失计算。

使用 losses.SparseCategoricalCrossentropy 损失函数计算交叉熵损失:
(由于这是一个未训练的模型,它给出每个结果的概率为1/10,因此交叉熵应该接近于 -log(1/10)≈2.3 )

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss_fn(y_train[:1], tf.nn.softmax(predictions))
''' <tf.Tensor: shape=(), dtype=float32, numpy=2.344348> '''

选择训练时使用的优化器和损失函数:

model.compile(
    optimizer="adam",
    loss=loss_fn,
    metrics=["accuracy"],
)

开始训练,训练5个epoch:

model.fit(x_train, y_train, epochs=5)

'''
Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 5s 90us/sample - loss: 0.3011 - accuracy: 0.9117
Epoch 2/5
60000/60000 [==============================] - 5s 83us/sample - loss: 0.1430 - accuracy: 0.9574
Epoch 3/5
60000/60000 [==============================] - 7s 119us/sample - loss: 0.1089 - accuracy: 0.9671
Epoch 4/5
60000/60000 [==============================] - 7s 125us/sample - loss: 0.0891 - accuracy: 0.9728
Epoch 5/5
60000/60000 [==============================] - 8s 130us/sample - loss: 0.0739 - accuracy: 0.9768
'''

使用模型的evaluate方法测试模型的表现,一般用在测试集上。

model.evaluate(x_test, y_test, verbose=2)
'''
输出信息:10000/10000 - 1s - loss: 0.0764 - accuracy: 0.9760
返回值:[0.07638283925862052, 0.976]
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值