batch_size 与数据大小的关系

Posted

技术标签:

【中文标题】batch_size 与数据大小的关系【英文标题】:Relationship between batch_size and data size 【发布时间】:2022-01-16 18:47:22 【问题描述】:

我有一个关于 batch_size 的简单基本问题

例如,这个简单的 RNN 使用 128 个数据集。

        length_of_sequence = 3
        in_out_neurons = 5
        n_hidden = 128
        model = Sequential()
        model.add(LSTM(n_hidden, batch_input_shape=(None, length_of_sequence, in_out_neurons), return_sequences=True))
        model.add(Dense(in_out_neurons,activation="linear"))
        optimizer = Adam(lr=0.001)
        model.compile(loss="mean_squared_error", optimizer=optimizer)
        model.summary()
        train_x = np.zeros((128,3,5))
        train_y = np.zeros((128,1,5))
        model.fit(
            train_x,train_y,
            batch_size=30,
            epochs=10,
            validation_split=0.9
        )

fit() 显示了这些结果。

但是 dataset 是 128,batch_size 是 30 所以,它必须像 在5/54/4 附近,我错了吗??

不知何故出现了1/1

Epoch 1/10
1/1 [==============================] - 2s 2s/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 2/10
1/1 [==============================] - 0s 33ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 3/10
1/1 [==============================] - 0s 32ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 4/10
1/1 [==============================] - 0s 33ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 5/10
1/1 [==============================] - 0s 46ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 6/10
1/1 [==============================] - 0s 34ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 7/10
1/1 [==============================] - 0s 34ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 8/10
1/1 [==============================] - 0s 38ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 9/10
1/1 [==============================] - 0s 28ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 10/10
1/1 [==============================] - 0s 26ms/step - loss: 0.0000e+00 - val_loss: 0.0000e+00

【问题讨论】:

您的验证拆分设置为 model.fit 中数据集的 90%。也许尝试将拆分调整为 0.2 等。 @sakumoil 谢谢你的建议。我了解如何调整拆分 【参考方案1】:

验证数据比训练数据大得多:总共 128 个数据样本,其中 90% 用于验证,因此验证数据约为 115,而训练数据只有约 13 个样本。当您设置 batch_size=30 时,13 幅图像很容易适合批次,这就是为什么只显示 1/1 用于训练和验证集(如 4/4)。

代码应更改如下以获得4/4进行训练和1/1进行验证:

model.fit(
     train_x,train_y,
     batch_size=30,
     epochs=10,
     validation_split=0.1
)

【讨论】:

我想念validation_split,反之亦然。谢谢你的帮助。

以上是关于batch_size 与数据大小的关系的主要内容,如果未能解决你的问题,请参考以下文章

Batchsize的大小怎样设置?Batchsize过大和过小有什么影响

Batch_Size对网络训练结果的影响

nn.linear()

预期输入 batch_size (18) 与目标 batch_size (6) 匹配

增加Batch_Size的优点

episodeepochbatch-sizeiteration区别