Различная производительность модели с использованием LSTM keras sample_weight при заполнении до или после фактических данных - PullRequest
0 голосов
/ 03 сентября 2018

Я строю модель в Керасе с входными данными X переменной длины (N_sample, 50, 128). Каждый образец имеет 50 временных шагов, и на каждом временном шаге у меня есть 128 функций. Тем не менее, я использовал заполнение нулями для генерации ввода X, потому что не все сэмплы имеют 50 временных шагов.

Есть два способа заполнения нулей.

  1. Для каждого образца я передаю достоверные данные, скажем (20,128) вначале, а затем оставшиеся (30,128) я дополняю нулями.

  2. Я дополняю первые 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)
...