Keras - Nan en resumen histograma LSTM

He escrito un modelo LSTM usando Keras y usando la activación anticipada LeakyReLU:

    # ADAM Optimizer with learning rate decay
    opt = optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0001)

    # build the model
    model = Sequential()

    num_features = data.shape[2]
    num_samples = data.shape[1]

    model.add(
        LSTM(16, batch_input_shape=(None, num_samples, num_features), return_sequences=True, activation='linear'))
    model.add(LeakyReLU(alpha=.001))
    model.add(Dropout(0.1))
    model.add(LSTM(8, return_sequences=True, activation='linear'))
    model.add(Dropout(0.1))
    model.add(LeakyReLU(alpha=.001))
    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])

Mis datos son un conjunto equilibrado de etiquetas binarias. es decir: 50% etiquetado 1 50% etiquetado 0. He usadoactivation='linear' para las capas LSTM que preceden a la activación de LeakyReLU, similar aeste ejemplo Encontré en GitHub.

La modelo lanzaNan in summary histogram error en esa configuración. Cambiar las activaciones de LSTM aactivation='sigmoid' funciona bien, pero parece que es algo incorrecto.

LeyendoEste StackOverflow pregunta sugerida "introduciendo un valor pequeño al calcular la pérdida", Simplemente no estoy seguro de cómo hacerlo en una función de pérdida incorporada.

ualquier ayuda / explicación sería apreciada.

Actualizar Puedo ver que la pérdida es nan en la primera época

260/260 [==============================] - 6s 23ms/step - 
loss: nan - acc: 0.5000 - precision: 0.5217 - recall: 0.6512 - f1: nan - val_loss: nan - val_acc: 0.0000e+00 - val_precision: -2147483648.0000 - val_recall: -49941480.1860 - val_f1: nan

Update 2 He actualizado TensorFlow y Keras a las versiones 1.12.0 y 2.2.4. No hubo ningún efecto.

Traté de agregar una pérdida a la primera capa LSTM como lo sugirió @Oluwafemi Sule, parece un paso en la dirección correcta, ahora la pérdida no es nan en la primera época, sin embargo, sigo teniendo el mismo error ... probablemente debido a otros valores nan, como val_loss / val_f1.

[==============================] - 7s 26ms/step - 
loss: 1.9099 - acc: 0.5077 - precision: 0.5235 - recall: 0.6544 - f1: 0.5817 - val_loss: nan - val_acc: 0.5172 - val_precision: 35.0000 - val_recall: 0.9722 - val_f1: nan

Update 3 Intenté compilar la red solo con la métrica de precisión, sin éxito:

Epoch 1/300
260/260 [==============================] - 8s 29ms/step - loss: nan - acc: 0.5538 - val_loss: nan - val_acc: 0.0000e+00

Respuestas a la pregunta(1)

Su respuesta a la pregunta