我正在尝试使用如下所示的输入形状训练张量流 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)
添加回答
举报
0/150
提交
取消