python - 使用 tensorflow 训练模型时数据大小发生变化
问题描述
我正在尝试在“Cifar10”数据集上训练 CNN。我导入它,当我检查形状时:
cifar10 = tf.keras.datasets.cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
y_train, y_test = y_train.flatten(), y_test.flatten()
print("x_train.shape:", x_train.shape)
print("y_train.shape", y_train.shape)
我得到的是:
x_train.shape: (50000, 32, 32, 3)
y_train.shape (50000,)
这表明我的数据有 50000 个实例。但是在训练模型时:
r = model.fit(x_train, y_train, epochs=2)
日志显示:
Epoch 1/2
1563/1563 [==============================] - 7s 5ms/step - loss: 1.4601 - accuracy: 0.4819
Epoch 2/2
1563/1563 [==============================] - 7s 5ms/step - loss: 1.1266 - accuracy: 0.6025
也就是说只有 1563 个实例。什么可能导致这种情况?
完整的笔记本在这里
解决方案
您在网络进程中看到的不是实例数,而是批次数。默认情况下,我猜您的函数将您的实例分成批次,然后通过训练它们继续进行。我猜每个批次的默认大小是 32,因此,您总共有 1563 个批次。
如果您检查拟合函数的说明,您将看到默认值batch_size
= 32。
推荐阅读
- c - 指令级的有符号数模
- python - 计算列表中的单词出现在字符串中的频率
- angular - 即使选择了取消或关闭,离子模式也会记住复选框选择
- javascript - 在 JavaScript 检测是否缺少某些图像之前等待所有图像以 HTML 错误加载
- c# - 当 transform.parent 设置为 null 时游戏对象放大
- dictionary - XSLT 以数组作为基于 csv 文件的值构建映射
- c - 并发:使用 pthread_mutex 原子化增量操作
- laravel - laravel 5.7 关系属于hasmany错误
- javascript - 我无法让多个 2d 对象从画布 x 和 y 反弹
- r - 在使用 cor 函数测试 R 中的显着性后确定 P 值