Я получаю очень большие потери при обучении (и тестировании) моего авто-кодера - PullRequest
1 голос
/ 30 октября 2019

Я получаю очень большие потери (170+). Я делаю авто-кодировщик с 3 скрытыми слоями и использую SGD в качестве моего оптимизатора. Я использовал cross_entropy в качестве функции потерь. Также изначально точность, которую я получаю, довольно хорошая (около 0,88), но она уменьшается почти после каждой эпохи.

Вот мой код:

   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)

1 Ответ

0 голосов
/ 30 октября 2019

По крайней мере, в принципе, sigmoid следует использовать только для вашего последнего слоя декодирования (здесь decoded3) - см. Примеры в Создание автоэнкодеров в Keras . Поэтому измените все остальные ваши активации на relu.

Кроме того, точность не имеет смысла в автоэнкодерах - просто удалите ее из компиляции вашей модели и сосредоточьтесь на потере .

...