Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我得到了一个非常高的损失,在培训和测试我的自动编码器_Python_Machine Learning_Keras_Deep Learning_Autoencoder - Fatal编程技术网

Python 我得到了一个非常高的损失,在培训和测试我的自动编码器

Python 我得到了一个非常高的损失,在培训和测试我的自动编码器,python,machine-learning,keras,deep-learning,autoencoder,Python,Machine Learning,Keras,Deep Learning,Autoencoder,我得到一个非常高的损失(170+)。我正在做一个自动编码器与3隐藏层和使用SGD作为我的优化。我用交叉熵作为损失函数。最初,我得到的精度相当好(约0.88),但几乎每过一个历元,精度都会下降 这是我的密码: encoding_dim=8 i=Input(shape=(60,)) encoded=Dense(30,activation='sigmoid')(i) encoded1=Dense(15,activation='sigmoid')(encoded) enco

我得到一个非常高的损失(170+)。我正在做一个自动编码器与3隐藏层和使用SGD作为我的优化。我用交叉熵作为损失函数。最初,我得到的精度相当好(约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)

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


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

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


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

您能解释一下准确度在自动编码器中是如何没有意义的吗?@MSalmanGhazi不知道您的具体情况,但由于通常它们主要用于重建目的,因此准确度没有任何用处(只有当你尝试对某些东西进行分类时)重要的是损失(另请参见链接示例)。你能解释一下在自动编码器中准确度是如何没有意义的吗?@MSalmanGhazi不知道你的具体情况,但由于通常它们主要用于重建目的,准确度没有任何用处(只有当你试图对某样东西进行分类时)重要的是损失(另请参见链接示例)。