You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow训练疑问:每个Epoch步数为1875,未遍历全部60000样本?

关于Keras训练MNIST时Epoch显示数据点的疑问解答

问题描述

我使用Keras和TensorFlow基于MNIST数据集构建基础神经网络,代码如下:

import os
import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(-1, 28*28).astype('float32') / 255.0 
x_test = x_test.reshape(-1, 28*28).astype('float32') / 255.0 
print(x_train.shape)
print(x_test.shape)

model = keras.Sequential(
            [
                keras.Input(shape=(28*28)),
                layers.Dense(512, activation="relu"),
                layers.Dense(256, activation="relu"),
                layers.Dense(10), 
            ]
        )

model.compile(
                loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                optimizer = keras.optimizers.Adam(learning_rate=0.001),
                metrics = ['accuracy'],
             )

model.fit(x_train, y_train, batch_size=32, epochs=5, verbose=2)

训练输出显示每个Epoch仅处理1875个数据点(即60000÷32),但训练集共有60000条记录,为何未遍历全部样本?

解答

这是个误解,1875是batch的数量,不是数据点数量。

MNIST训练集共60000条数据,你设置的batch_size=32,意味着每个训练步处理32条数据,一个Epoch要跑完所有训练数据,就需要执行 60000 ÷ 32 = 1875 个训练步。

Keras在verbose=2模式下,每个Epoch输出的数字就是这个训练步的数量,而非处理的数据点总数。实际上每个Epoch已经完整遍历了60000条训练样本——1875个batch × 32条数据/批次 = 60000条,刚好是训练集的总数据量。

如果想验证这一点,可以把verbose设为1,这样会显示进度条,能直观看到每个Epoch是从0到1875个batch逐步完成,背后对应的就是全部60000条数据的训练。

内容的提问来源于stack exchange,提问作者DumbCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:07:01