【问题标题】:How to load MNIST data sequentially for training?如何按顺序加载 MNIST 数据进行训练?
【发布时间】:2020-11-05 07:43:42
【问题描述】:

我现在使用 MNIST 和彩色数字版本来训练我的 SemGAN 模型。我已经加载并预处理了数据集。

x_train = x_train[0:10000]
y_train = y_train[0:10000]
x_test = x_test[0:10]
y_test = y_test[0:10]
x_train = x_train.reshape(-1, 28, 28, 1).astype(np.float32)
x_test = x_test.reshape(-1, 28, 28, 1).astype(np.float32) 

现在我必须将每个重塑后的数据 (28, 28, 1) 按顺序提供给模型(批量或随机批量),我该怎么做?谁能帮帮我?

【问题讨论】:

  • 你用的是什么框架:tensorflow、pytorch?通常有很多教程可供您参考,尤其是对于像输入数据集这样相对简单的东西。
  • 感谢您的回复,安德鲁。我正在使用 TensorFlow 1.15。我想得到的是 input_i 代表来自 MNIST 的张量,然后我做inputs_i=tf.train.batch(input_i, Batch_size)。问题是我怎样才能得到这个 input_i。

标签: python tensorflow mnist


【解决方案1】:

您需要定义神经网络架构。这是一个简单的 CNN,仅用于说明目的,您可以针对您的案例研究 GAN 架构并构建它或提出一个单独的问题。

mnist_model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(16,[3,3], activation='relu',
                            input_shape=(None, None, 1)),
    tf.keras.layers.Conv2D(16,[3,3], activation='relu'),
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(10)
])

然后你需要编译你的损失、优化器、指标等。同样,这里是分类的基本编译。

mnist_model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                    metrics=[tf.keras.metrics.CategoricalAccuracy()])

现在,谈谈你的问题。一切设置好后,您就可以像这样使用模型的拟合函数了

mnist_model.fit(x_train, y_train, batch_size=64, epochs=1, shuffle=True, validation_split=0.05)

批次大小为 64,因此 fit 以 64 的间隔遍历所有批次,直到它们完成。有一个用于验证的拆分参数,用于检查模型是否正在训练(而不是过度训练)——因此,结合 64 批大小,将有 ceil(60000*0.95/64) 迭代,其中 60000 来自训练集(您选择了 10000 个)。在这种情况下,默认情况下,调用将在每个 epoch 随机打乱训练集。最后,有一个 1 的纪元,但实际上你可能希望这个更高。

【讨论】:

  • 谢谢,我明白你的意思。但是对于我的模型,我没有使用 model.fit() 进行训练。我的输入是 mnist 图像,对应的 one-hot 编码标签,彩色版本的 mnist 图像,对应的 one-hot 编码标签。因此,将以适当的批量大小将四个输入输入到模型中。此处未使用原始标签 y_train。这就是为什么这个问题让我很困扰的原因。
  • @QINGXIA 所有这些大部分都应该由您的输入层、架构和损失函数来处理。您必须发布更具体的代码和您遇到的具体问题以获得更多帮助。
  • 谢谢,Andrew,我会根据您提供的信息尝试解决问题。
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2016-06-08
  • 2017-09-30
  • 2021-06-03
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多