MNIST 数据分类不适用于 Google Colab

use*_*814 1 python neural-network keras google-colaboratory

我正在尝试在 Google colab 上使用深度 MLP 训练 MNIST 数字数据集。我重新调整了输入并进行了数据预处理。模型代码如下:

    #define the model layers
    model = Sequential()
    model.add(Dense(512, input_shape = input_shape, activation = "relu"))
    model.add(Dense(256, activation = "relu"))
    model.add(Dropout(0.1))
    model.add(Dense(128,activation = "relu"))
    model.add(Dense(64,activation = "relu"))
    model.add(Dropout(0.1))
    model.add(Flatten())
    model.add(Dense(tar_class,activation = "sigmoid"))

    model.compile(optimizer = "adam",
          loss = "categorical_crossentropy",
          metrics = ["accuracy"])

    model.summary()

    history = model.fit(X_train,y_train,
                epochs = 10,
                validation_split = 0.1,
                batch_size = 64,
                verbose = True)
Run Code Online (Sandbox Code Playgroud)

当我运行 model.fit 代码时,仅对数据集中的 844 个样本进行训练,而不是对 60000 个样本进行训练。不过,这段代码在我本地的 jupyter 笔记本中运行良好。我想在 Colab 上工作,这样我就可以使用 GPU 来训练模型,这比我的本地机器更快。

有人可以帮我吗?

Ani*_*ote 5

844 并不代表正在训练的样本数量,而是代表每个时期的步数。

步数是多少?
步骤的数量等于通过的次数,即(1 pass = 1 Forward Pass + 1 Backward pass)在一个纪元中发生的次数。
步骤数计算如下:

no_of_steps_per_epoch = ceil(Total_no_of_samples / batch_size)
Run Code Online (Sandbox Code Playgroud)

为了完成一个时期,您必须迭代整个数据集。IE。迭代所有批次。

例如:X_train有60000个样本。
您已将validation_split指定为0.1。因此,该 X_train 的 0.1% 将用作验证数据。IE。它不会用于培训。

因此,训练样本数将为 (60000 - 6000) = 54000。

现在您已将batch_size指定为64。
因此,

no_of_steps_per_epoch = ceil(54000/64) = ceil(843.74) = 844
Run Code Online (Sandbox Code Playgroud)

这就是你得到844的方式。

这并不意味着您正在使用 844 个样本进行训练。