Keras未使用完整数据集训练问题及修复咨询
别担心!你的模型其实在用到全部60000条训练数据
你是不是看到训练输出里的1875就以为模型只用到了1875条数据?其实这是个常见的误解——1875是训练的step(步数),不是样本数量!
原因解释
Keras的model.fit()方法默认使用batch_size=32,也就是每次训练会一次性处理32条样本。你的训练集总共有60000条数据,60000 ÷ 32 = 1875,所以每个epoch会跑完1875个step,每个step处理32条样本,加起来正好是全部60000条数据。
你可以自己验证一下:在代码里加一行print(len(train_images)),会输出60000,再算一下32×1875,结果也是60000,完全对得上。
几个验证/调整方案
手动指定batch_size:如果想让每个epoch只跑1个step(一次性处理全部数据),可以把batch_size设为60000:
model.fit(train_images, train_labels, epochs=10, batch_size=60000)这时候训练输出就会显示
1/1,直观看到整个训练集被一次性处理。调整verbose参数:把
verbose设为2,训练输出会直接显示总样本数,而不是step数:model.fit(train_images, train_labels, epochs=10, verbose=2)输出会变成这样:
Epoch 1/10
60000/60000 - 3s - loss: 0.3183 - accuracy: 0.8866查看训练日志细节:如果用TensorBoard之类的工具,也能看到每个epoch处理的样本总数确实是60000。
所以你的模型训练完全是正常的,只是输出显示的是step数而非样本数而已~
内容的提问来源于stack exchange,提问作者Sabyasachi Bhoi
相关产品推荐
相关产品推荐

