LSTM agradáveis e previsões de stream
Treinei um modelo LSTM (construído com Keras e TF) em vários lotes de 7 amostras com 3 recursos cada, com o formato abaixo da amostra (os números abaixo são apenas espaços reservados para fins de explicação), cada lote é rotulado 0 ou 1:
Dados
[
[[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]]
...
]
i.e: lotes de m sequências, cada uma com o comprimento 7, cujos elementos são vetores tridimensionais (portanto, o lote tem forma (m * 7 * 3))
Alvo
[
[1]
[0]
[1]
...
]
No meu ambiente de produção, os dados são um fluxo de amostras com três recursos [1,2,3],[1,2,3]...
). Gostaria de transmitir cada amostra à medida que ela chega ao meu modelo e obter a probabilidade intermediária sem esperar pelo lote inteiro (7) - veja a animação abaixo.
Um dos meus pensamentos estava preenchendo o lote com 0 para as amostras ausentes,[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[1,2,3]]
mas isso parece ser ineficiente.
Apreciará qualquer ajuda que me indique a direção certa de salvar o estado intermediário LSTM de maneira persistente, enquanto aguarda a próxima amostra e prevejo um modelo treinado em um tamanho de lote específico com dados parciai
Atualizar incluindo o código do modelo:
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])
Resumo do modelo:
_________________________________________________________________
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
_________________________________________________________________