【问题标题】:I am getting a very high loss in training (& testing) my auto-encoder我在训练(和测试)我的自动编码器时损失很大
【发布时间】:2020-02-25 13:28:01
【问题描述】:

我的损失非常高(170+)。我正在制作一个具有 3 个隐藏层的自动编码器,并使用 SGD 作为我的优化器。我使用 cross_entropy 作为我的损失函数。同样,最初,我得到的准确度非常好(大约 0.88),但几乎在每个 epoch 后都会降低。

这是我的代码:

   encoding_dim=8
   i=Input(shape=(60,))
   encoded=Dense(30,activation='sigmoid')(i)
   encoded1=Dense(15,activation='sigmoid')(encoded)
   encoded2=Dense(8,activation='relu')(encoded1)
   #encoded=Dense(encoding_dim,activation='sigmoid')(encoded2)

   decoded=Dense(15,activation='sigmoid')(encoded2)
   decoded2 =Dense(30,activation='sigmoid')(decoded)
   decoded3 =Dense(60,activation='sigmoid')(decoded2)
   autoencoder = Model(i, decoded3)

   ec = Model(i,encoded)
   encoded_input=Input(shape=(encoding_dim,))
   decoder_layer=autoencoder.layers[-3](encoded_input)
   decoder_layer=autoencoder.layers[-2](decoder_layer)
   decoder_layer=autoencoder.layers[-1](decoder_layer)

   decoder = Model(encoded_input, decoder_layer)
   from keras.optimizers import SGD
   opt = SGD(lr=0.06)
   #model.compile(loss = "categorical_crossentropy", optimizer = opt)
   autoencoder.compile(loss = "categorical_crossentropy", optimizer = opt,metrics=['accuracy'])

   autoencoder.fit(X_Train, X_Train,
            epochs=200,
            batch_size=200,
            shuffle=True,
            validation_data=(X_Test, X_Test))

   #encoded_out= ec.predict(X_Test)
   #decoded_out=decoder.predict(encoded_out)

【问题讨论】:

    标签: python machine-learning keras deep-learning autoencoder


    【解决方案1】:

    至少在原则上,sigmoid 应该只用于您的最后一个解码层(此处为decoded3) - 请参阅Building Autoencoders in Keras 中的示例。因此,将所有其他激活更改为 relu

    此外,准确性在自动编码器中没有意义 - 只需将其从模型编译中删除并专注于损失

    【讨论】:

    • 你能解释一下自动编码器中的准确性是如何没有意义的吗?
    • @MSalmanGhazi 不知道您的具体情况,但由于通常它们主要用于 重建 目的,因此准确性没有任何用处(仅当您尝试分类东西)。重要的是 loss(另请参见链接示例)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多