我正在嘗試使用如下所示的輸入形狀訓(xùn)練張量流 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")使用以下代碼訓(xùn)練模型model.fit(x_train, y_train, epochs=50, batch_size=256, validation_split=0.2, shuffle=True)我總是收到以下錯誤。我知道存在一些內(nèi)存溢出,因此想減少我的批量大小。但我在這里發(fā)現(xiàn)令人驚訝的是,我給出的批量大小是無效的,因?yàn)槲铱偸鞘盏缴鲜鲥e誤,其中張量試圖為大小分配張量,[583299,50,5]但我想我應(yīng)該期待類似的東西[batch_size,50,5]。我可以知道上面的實(shí)現(xiàn)有什么問題嗎?如何有效地給出訓(xùn)練的批量大小,從而避免內(nèi)存溢出。任何幫助解決此問題的幫助都將受到高度贊賞。提前致謝。
1 回答

汪汪一只貓
TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個贊
您的錯誤是正常行為。
您直接向模型提供整個數(shù)組,并要求它對每 256 個樣本進(jìn)行批處理。通過這樣做,即使您只要求進(jìn)行 256 批計(jì)算,在某些時候它也會分配整個數(shù)組。
為了僅分配一個子集,您需要做的是使用 a?Generator
,這只會產(chǎn)生一批數(shù)據(jù)。
一旦你有了一個正在運(yùn)行的 Sequence 對象,在調(diào)用它時它會為你提供一(X, 50 ,5) and (1,)
對,你可以像往常一樣調(diào)用 fit 并刪除參數(shù)batch_size
。
model.fit(x_train,?y_train,?epochs=50,?validation_split=0.2,?shuffle=True)
添加回答
舉報(bào)
0/150
提交
取消