2015-08-27 60 views
6

有人请向我解释为什么autoencoder不收敛?对我来说,下面两个网络的结果应该是一样的。但是,下面的autoencoder不是收敛的,而是它下面的网络。keras autoencoder不会收敛

# autoencoder implementation, does not converge 
autoencoder = Sequential() 
encoder = containers.Sequential([Dense(32,16,activation='tanh')]) 
decoder = containers.Sequential([Dense(16,32)]) 
autoencoder.add(AutoEncoder(encoder=encoder, decoder=decoder, 
         output_reconstruction=True)) 
rms = RMSprop() 
autoencoder.compile(loss='mean_squared_error', optimizer=rms) 

autoencoder.fit(trainData,trainData, nb_epoch=20, batch_size=64, 
      validation_data=(testData, testData), show_accuracy=False) 

# non-autoencoder implementation, converges 

model = Sequential() 
model.add(Dense(32,16,activation='tanh')) 
model.add(Dense(16,32)) 
model.compile(loss='mean_squared_error', optimizer=rms) 

model.fit(trainData,trainData, nb_epoch=numEpochs, batch_size=batch_size, 
      validation_data=(testData, testData), show_accuracy=False) 
+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-模型2有形状没有25任何建议? –

回答

2

我觉得Keras的自动编码器实现捆绑编码器和解码器的权重,而在您的实现,编码器和解码器具有单独的权重。如果您的实施可以带来更好的测试数据性能,那么可能表明您的问题可能需要不受限制的权重。

+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-have-shape-none-25任何建议 –

2

Keras的新版本(0.3.0)不再在AutoEncoder中绑定权重,它仍然显示不同的收敛性。这是因为权重的初始化方式不同。

在非AE示例中,首先初始化密集(​​32,16)权重,然后是密集(16,32)。在AE示例中,首先初始化密集(​​32,16)权重,然后是密集(16,32),然后在创建AutoEncoder实例时,重新初始化密集(​​32,16)权重(self.encoder.set_previous (节点)将调用build()来初始化权重)。

现在以下两个神经网络收敛如出一辙:

autoencoder = Sequential() 
encoder = containers.Sequential([Dense(32,16,activation='tanh')]) 
decoder = containers.Sequential([Dense(16,32)]) 
autoencoder.add(AutoEncoder(encoder=encoder, decoder=decoder, 
         output_reconstruction=True)) 
rms = RMSprop() 
autoencoder.compile(loss='mean_squared_error', optimizer=rms) 
np.random.seed(0) 
autoencoder.fit(trainData,trainData, nb_epoch=20, batch_size=64, 
      validation_data=(testData, testData), show_accuracy=False) 

# non-autoencoder 
model = Sequential() 
model.add(Dense(32,16,activation='tanh')) 
model.add(Dense(16,32)) 
model.set_weights(autoencoder.get_weights()) 
model.compile(loss='mean_squared_error', optimizer=rms) 
np.random.seed(0) 
model.fit(trainData,trainData, nb_epoch=numEpochs, batch_size=batch_size, 
      validation_data=(testData, testData), show_accuracy=False) 
+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-shape-none-25有什么建议吗? –