为了账号安全,请及时绑定邮箱和手机立即绑定

无法在张量流 keras 模型中提供有效的批量大小,导致 OOM

无法在张量流 keras 模型中提供有效的批量大小,导致 OOM

Qyouu 2023-08-08 16:17:47
我正在尝试使用如下所示的输入形状训练张量流 keras 模型。x_train = (729124, 50, 5) y_train = (729124,)我的模型定义如下model = tf.keras.models.Sequential()model.add(tf.keras.layers.Conv1D(filters=8, kernel_size=2, input_shape=(50,5), activation='relu'))# model.add(tf.keras.layers.InputLayer(input_shape=input_shape))model.add(tf.keras.layers.LSTM(256, return_sequences=True, kernel_regularizer=tf.keras.regularizers.l2(0.01)))model.add(tf.keras.layers.BatchNormalization())model.add(tf.keras.layers.LSTM(256, dropout=0.1, kernel_regularizer=tf.keras.regularizers.l2(0.01)))model.add(tf.keras.layers.BatchNormalization())model.add(tf.keras.layers.Dense(256, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.01)))model.add(tf.keras.layers.BatchNormalization())model.add(tf.keras.layers.Dropout(0.5))model.add(tf.keras.layers.Dense(256, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.01)))model.add(tf.keras.layers.BatchNormalization())model.add(tf.keras.layers.Dropout(0.5))model.add(tf.keras.layers.Dense(1))model.compile(loss='mse', optimizer="adam")使用以下代码训练模型model.fit(x_train, y_train, epochs=50, batch_size=256, validation_split=0.2, shuffle=True)我总是收到以下错误。我知道存在一些内存溢出,因此想减少我的批量大小。但我在这里发现令人惊讶的是,我给出的批量大小是无效的,因为我总是收到上述错误,其中张量试图为大小分配张量,[583299,50,5]但我想我应该期待类似的东西[batch_size,50,5]。我可以知道上面的实现有什么问题吗?如何有效地给出训练的批量大小,从而避免内存溢出。任何帮助解决此问题的帮助都将受到高度赞赏。提前致谢。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

您的错误是正常行为。

您直接向模型提供整个数组,并要求它对每 256 个样本进行批处理。通过这样做,即使您只要求进行 256 批计算,在某些时候它也会分配整个数组。

为了仅分配一个子集,您需要做的是使用 a Generator,这只会产生一批数据。

一旦你有了一个正在运行的 Sequence 对象,在调用它时它会为你提供一(X, 50 ,5) and (1,)对,你可以像往常一样调用 fit 并删除参数batch_size

model.fit(x_train, y_train, epochs=50, validation_split=0.2, shuffle=True)


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信