簡體   English   中英

我在訓練(和測試)我的自動編碼器時損失很大

[英]I am getting a very high loss in training (& testing) my auto-encoder

我的損失非常高(170+)。 我正在制作一個具有 3 個隱藏層的自動編碼器,並使用 SGD 作為我的優化器。 我使用 cross_entropy 作為我的損失 function。 同樣最初,我得到的准確度非常好(大約 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)

至少在原則上, sigmoid應該只用於你的最后一個解碼層(這里decoded3 ) - 請參閱 Keras 中的構建自動編碼器中的示例。 因此,將所有其他激活更改為relu

此外,准確性在自動編碼器中沒有意義 - 只需將其從 model 編譯中刪除並專注於loss

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM