Skip to content

Latest commit

 

History

History
96 lines (72 loc) · 3.03 KB

3.7_softmax-regression-tensorflow2.0.md

File metadata and controls

96 lines (72 loc) · 3.03 KB

3.7 softmax回归的简洁实现

我们在3.3节(线性回归的简洁实现)中已经了解了使用Tensorflow2.0实现模型的便利。下面,让我们再次使用Tensorflow2.0来实现一个softmax回归模型。首先导入所需的包或模块。

import tensorflow as tf
from tensorflow import keras

3.7.1 获取和读取数据

我们仍然使用Fashion-MNIST数据集和上一节中设置的批量大小。

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

对数据进行处理,归一化,便于训练

x_train = x_train / 255.0
x_test = x_test / 255.0

3.7.2 定义和初始化模型

在3.4节(softmax回归)中提到,softmax回归的输出层是一个全连接层。因此,我们添加一个输出个数为10的全连接层。 第一层是Flatten,将28 * 28的像素值,压缩成一行 (784, ) 第二层还是Dense,因为是多分类问题,激活函数使用softmax

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

3.7.3 softmax和交叉熵损失函数

如果做了上一节的练习,那么你可能意识到了分开定义softmax运算和交叉熵损失函数可能会造成数值不稳定。因此,Tensorflow2.0的keras API提供了一个loss参数。它的数值稳定性更好。

loss = 'sparse_categorical_crossentropy'

3.7.4 定义优化算法

我们使用学习率为0.1的小批量随机梯度下降作为优化算法。

optimizer = tf.keras.optimizers.SGD(0.1)

3.7.5 训练模型

接下来,我们使用上一节中定义的训练函数来训练模型。

model.compile(optimizer=tf.keras.optimizers.SGD(0.1),
              loss = 'sparse_categorical_crossentropy',
              metrics=['accuracy'])

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

输出:

Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 1s 20us/sample - loss: 0.7941 - accuracy: 0.7408
Epoch 2/5
60000/60000 [==============================] - 1s 11us/sample - loss: 0.5729 - accuracy: 0.8112
Epoch 3/5
60000/60000 [==============================] - 1s 11us/sample - loss: 0.5281 - accuracy: 0.8241
Epoch 4/5
60000/60000 [==============================] - 1s 11us/sample - loss: 0.5038 - accuracy: 0.8296
Epoch 5/5
60000/60000 [==============================] - 1s 11us/sample - loss: 0.4866 - accuracy: 0.8351

接下来,比较模型在测试数据集上的表现情况

test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test Acc:',test_acc)

输出:

 - 1s 55us/sample - loss: 0.4347 - accuracy: 0.8186
Test Acc: 0.8186

小结

  • Tensorflow2.0提供的函数往往具有更好的数值稳定性。
  • 可以使用Tensorflow2.0更简洁地实现softmax回归。

注:本节除了代码之外与原书基本相同,原书传送门