чтобы построить lstm с помощью Pytorch, вы поймете преимущества динамического графа, как только увидите их.

чил модель 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
_________________________________________________________________

Ответы на вопрос(4)

Ваш ответ на вопрос