Keras 没有对整个数据集进行训练

Keras not training on entire dataset

所以我一直在关注 Google 的官方 tensorflow 指南并尝试使用 Keras 构建一个简单的神经网络。但是在训练模型时,它并没有使用整个数据集(有 60000 个条目),而是只使用 1875 个条目进行训练。任何可能的修复?

import tensorflow as tf
from tensorflow import keras
import numpy as np

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

train_images = train_images / 255.0
test_images = test_images / 255.0

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

model = keras.Sequential([
                          keras.layers.Flatten(input_shape=(28, 28)),
                          keras.layers.Dense(128, activation='relu'), 
                          keras.layers.Dense(10)
])

model.compile(optimizer='adam',
              loss= tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=10)

输出:

Epoch 1/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3183 - accuracy: 0.8866
Epoch 2/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3169 - accuracy: 0.8873
Epoch 3/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3144 - accuracy: 0.8885
Epoch 4/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3130 - accuracy: 0.8885
Epoch 5/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3110 - accuracy: 0.8883
Epoch 6/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3090 - accuracy: 0.8888
Epoch 7/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3073 - accuracy: 0.8895
Epoch 8/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3057 - accuracy: 0.8900
Epoch 9/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3040 - accuracy: 0.8905
Epoch 10/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3025 - accuracy: 0.8915

<tensorflow.python.keras.callbacks.History at 0x7fbe0e5aebe0>

这是原始的 google colab notebook,我一直在做这个:https://colab.research.google.com/drive/1NdtzXHEpiNnelcMaJeEm6zmp34JMcN38

它没有训练 1875 个样本。

Epoch 1/10
1875/1875 [===

1875 这里是步数,不是样本。在 fit 方法中,有一个参数,batch_size。它的默认值为 32。所以1875*32=60000。执行正确。

如果你用 batch_size=16 训练它,你会看到步数将是 3750 而不是 1875,因为 60000/16=3750.

拟合模型时显示的数字1875不是训练样本;它是batches.

的数量

model.fit 包含一个可选参数 batch_size,根据 documentation:

If unspecified, batch_size will default to 32.

所以,这里发生的是 - 您适合默认的批处理大小 32(因为您没有指定任何不同的东西),所以您的数据的批处理总数是

60000/32 = 1875

如果您希望整个 60000 个数据样本都可见,只需使用 batch_size = 1。