Я обучил модель LSTM (построенную с Keras и TF) на нескольких партиях по 7 образцов с 3 характеристиками в каждом, с формой, подобной образцу, приведенному ниже (цифры ниже являются просто заполнителями для целей объяснения), каждая партия помечена как 0 или 1:
Данные:
[
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
...
]
то есть: партии из m последовательностей, каждая длиной 7, элементы которых являются 3-мерными векторами (таким образом, партия имеет форму (m * 7 * 3))
Цель:
[
[1]
[0]
[1]
...
]
В моей производственной среде данные представляют собой поток образцов с 3 функциями ([1,2,3],[1,2,3]...
). Я хотел бы передавать каждый образец по мере его поступления в мою модель и получать промежуточную вероятность, не дожидаясь всего пакета (7) - см. Анимацию ниже.
Одной из моих мыслей было заполнение партии 0 для отсутствующих образцов, [[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[1,2,3]]
но это кажется неэффективным.
Буду признателен за любую помощь, которая укажет мне правильное направление, как в постоянном сохранении промежуточного состояния LSTM, так и в ожидании следующей выборки и прогнозирования модели, обученной конкретному размеру пакета с частичными данными.
Обновление, включая код модели:
opt = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=10e-8, decay=0.001)
model = Sequential()
num_features = data.shape[2]
num_samples = data.shape[1]
first_lstm = LSTM(32, batch_input_shape=(None, num_samples, num_features), return_sequences=True, activation='tanh')
model.add(
first_lstm)
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(LSTM(16, return_sequences=True, activation='tanh'))
model.add(Dropout(0.2))
model.add(LeakyReLU())
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=opt,
metrics=['accuracy', keras_metrics.precision(), keras_metrics.recall(), f1])
Сводка модели:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (None, 100, 32) 6272
_________________________________________________________________
leaky_re_lu_1 (LeakyReLU) (None, 100, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 100, 32) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 100, 16) 3136
_________________________________________________________________
dropout_2 (Dropout) (None, 100, 16) 0
_________________________________________________________________
leaky_re_lu_2 (LeakyReLU) (None, 100, 16) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 1600) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 1601
=================================================================
Total params: 11,009
Trainable params: 11,009
Non-trainable params: 0
_________________________________________________________________