【问题标题】:MNIST data classification not working on Google ColabMNIST 数据分类不适用于 Google Colab
【发布时间】:2020-12-22 02:43:22
【问题描述】:

我正在尝试在 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)

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

谁能帮帮我?

【问题讨论】:

  • 你怎么知道它只训练 844 个样本?
  • 你能打印X_train.shapey_train.shape并分享结果吗?
  • @Reza 在我训练模型时,每个 epoch 显示 1/844....有时它会变为随机数,如 938、1644 等。
  • @Grayrigel X_train 的形状:(60000, 28, 28, 1) y_train 的形状:(60000, 10) X_test 的形状:(10000, 28, 28, 1) y_test 的形状:( 10000, 10)如果您想查看整个代码,我可以分享代码的 GitHub 链接
  • @Reza 如果您想查看整个代码,我可以分享代码的 GitHub 链接

标签: python keras neural-network google-colaboratory


【解决方案1】:

844 并不代表它正在接受训练的样本数量,但它代表每个 epoch 的步数。

步数是多少?
步数相当于一个时期内发生的通过次数,即(1 pass = 1 Forward Pass + 1 Backward pass)
步数计算为:

no_of_steps_per_epoch = ceil(Total_no_of_samples / batch_size)

要完成一个 epoch,您必须遍历整个数据集。 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

这就是你得到 844 的方式。

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

【讨论】:

  • 哦,好吧....所以这意味着 54000 正在接受 844 步的训练,对吗?
  • 另外,如果我不指定批量大小,那么 no_of_steps_pre_epoch 将等于训练样本(54000)对吧?
  • 默认情况下,batch_size 为 32。请参阅 here。如果你想让steps_per_epoch等于样本集的数量batch_size = 1
  • 哦,好的...知道了...谢谢...但是当我在本地的 jupyter notebook 中运行相同的代码时,训练显示每个 epoch 为 1/540000(samples) 而不是超过 1/steps_per_epoch...这是有原因的吗?
  • 我不明白你想说什么。你能详细说明一下吗?
猜你喜欢
  • 2021-09-07
  • 2020-09-27
  • 2022-12-15
  • 2022-11-08
  • 2020-09-10
  • 2020-04-27
  • 1970-01-01
  • 2019-06-07
  • 2023-03-09
相关资源
最近更新 更多