tensorflow CNN 不使用所有图像进行训练

tensorflow CNN does not use all the images for training

我定义了一个tensorflow CNN如下:

    import tensorflow as tf

from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
model = models.Sequential()
model.add(layers.Conv2D(1, (9, 9), activation='relu', input_shape=(153, 204,1)))
model.add(layers.MaxPooling2D((3, 3)))
model.add(layers.Conv2D(2, (9,9), activation='tanh'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(2, (9,9), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1, activation  = 'softmax'))
model.summary()

我用这个命令训练的

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

history = model.fit(image_list, behaviour, epochs=5, 
                    validation_data=(image_list, behaviour), verbose = 1)

(这是初始提交,所以我还不想进行训练测试拆分,一次一个块)

image_list 的尺寸为 :(1809, 153, 204, 1) 1809 张图片,每张图片为 153x204x1 像素 行为可以取任何值 0,1,2

但是我注意到一些奇怪的事情,即在训练期间我得到了这个

57/57 [==============================] - 19s 325ms/step - loss: 0.0000e+00 - accuracy: 0.2537 - val_loss: 0.0000e+00 - val_accuracy: 0.2830

为什么有 57/57。这是否意味着只考虑了 57 张图像?可以预见的是,损失 = 0 但准确度 = 30%,这大致对应于数据集中第一个标签的百分比(所有 57 个第一张图像共享)

我怎样才能说服它考虑更多? PS,我知道洗牌,我只想使用训练集中的所有图像 谢谢大家的宝贵时间 最佳

57是每个epoch的迭代次数。

你有 1809 张图片,默认的 batch 大小是 32(也是图片)——因为你没有在代码中指定(see the documentation),所以 cell(1809/batch_szie) = 57.

因此,所有图像在每个 epoch 都被考虑在内,只需 57 步(迭代)即可完成。