Я строю модель в Керасе с входными данными X переменной длины (N_sample, 50, 128). Каждый образец имеет 50 временных шагов, и на каждом временном шаге у меня есть 128 функций. Тем не менее, я использовал заполнение нулями для генерации ввода X, потому что не все сэмплы имеют 50 временных шагов.
Есть два способа заполнения нулей.
Для каждого образца я передаю достоверные данные, скажем (20,128) вначале, а затем оставшиеся (30,128) я дополняю нулями.
Я дополняю первые 30 строк нулями и добавляю данные в последние 20 строк.
Затем я использую sample_weight
, чтобы присвоить нулевой вес дополненным временным шагам.
Однако в этих двух настройках я получаю совершенно разные AUC на тестовом наборе. Что произойдет, если заполненные нулями выборки будут поданы до или после настоящих данных в сети LSTM с sample_weights
? Это связано с инициализацией скрытого состояния в LSTM?
Откуда мне знать, что правильно? Спасибо.
Моя модель, как показано ниже:
model = Sequential()
model.add(TimeDistributed(Dense(64, activation='sigmoid'), input_shape=(50, 128)))
model.add(LSTM(32, return_sequences=True))
model.add(TimeDistributed(Dense(8, activation='sigmoid')))
model.add(TimeDistributed(Dense(1, activation='sigmoid')))
model.compile(loss='binary_crossentropy', optimizer='rmsprop',sample_weight_mode='temporal', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=2, sample_weight=Sample_weight_train)