经过训练的网络可以预测NaN的输出

时间:2019-09-24 15:06:22

标签: python tensorflow keras

我正在研究一种自动编码器,用于编码/解码文章的德语标题(约2k个样本)。我使用字节对编码作为字符编码和单词编码之间的折衷。这是我正在为此使用的模型:

def create_model(characters, enc_size, latent_dim): #my parameter values: 32, 512, 32
    inputs = tf.keras.layers.Input(shape=(characters, enc_size))
    encoded = tf.keras.layers.CuDNNLSTM(128, return_sequences=True)(inputs)
    encoded = tf.keras.layers.CuDNNLSTM(latent_dim)(encoded)

    vector = tf.keras.layers.Input(shape=(latent_dim,))
    decoded = tf.keras.layers.RepeatVector(characters)(vector)
    decoded = tf.keras.layers.CuDNNLSTM(128, return_sequences=True)(decoded)
    decoded = tf.keras.layers.CuDNNLSTM(enc_size, return_sequences=True)(decoded)

    encoder = tf.keras.models.Model(inputs, encoded)
    decoder = tf.keras.models.Model(vector, decoded)

    auto = encoder(inputs)
    auto = decoder(auto)
    auto = tf.keras.models.Model(inputs, auto)

    opt = tf.keras.optimizers.Adam(lr=1e-3)
    auto.compile(optimizer=opt,
                  loss='categorical_crossentropy',
                  metrics=["accuracy"])
    auto.summary()

    return auto, encoder, decoder

我通过修改此keras article中的Sequence-to-Sequence示例来创建其结构。训练该模型没有问题。损耗减少,而精度提高。在整个过程中,两者都永远不会变成NaN。现在,当我尝试在预测(model.predict)中使用它时,输出是一个充满NaN的数组。奇怪的是,如果我使用“ binary_crossentropy”(尽管它并不真正适合此任务,因为字节对是一个热编码的)而不是“ categorical_crossentropy”,则不会发生,并且训练后的预测不是NaN。但是看来,即使经过200个纪元之后,实际输出也并没有真正提高。由于“ binary_accuracy”的不正确性,我不能说真的。

最好的预测例子之一

  

原文:“在wohnhaus中的luegde einbruch” |预测:“在einbruch的moren einbruch中,这样的ininbruchbrandeses”

我也可以肯定,数据集没有被NaNs或Infs污染。 有谁知道这种奇怪行为的解决方案/原因,还是知道带有编码器和解码器模型的文本自动编码器的工作示例。 预先感谢!

0 个答案:

没有答案