[英]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.