2015-08-27 21 views
6

कनवर्ट नहीं कर रहा है क्या कोई मुझे बता सकता है कि ऑटोकोडर अभिसरण क्यों नहीं कर रहा है? मेरे लिए नीचे दो नेटवर्क के परिणाम समान होना चाहिए। हालांकि, नीचे 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 के Autoencoder कार्यान्वयन बांध एनकोडर और विकोडक के वजन, जबकि अपने कार्यान्वयन में, एनकोडर और विकोडक अलग भार है लगता है। यदि आपका कार्यान्वयन टेस्ट डेटा पर बेहतर प्रदर्शन कर रहा है, तो यह संकेत दे सकता है कि आपकी समस्या के लिए असंबद्ध वजन की आवश्यकता हो सकती है।

+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking- लक्ष्य-expected-model-2-to-have-shape-none-25 कोई सुझाव –

2

केरास के नए संस्करण (0.3.0) ने ऑटोइन्कोडर में वजन कम नहीं किया है, और यह अभी भी अलग अभिसरण दिखाता है। ऐसा इसलिए है क्योंकि भार अलग-अलग शुरू होते हैं।

गैर-एई उदाहरण में, घने (32,16) भार पहले शुरू किए जाते हैं, इसके बाद घने (16,32) होते हैं। एई उदाहरण में, घने (32,16) भार पहले शुरू किए जाते हैं, इसके बाद घने (16,32) होते हैं, और फिर जब आप ऑटोइन्कोडर उदाहरण बनाते हैं, तो घन (32,16) भार फिर से शुरू होते हैं (self.encoder.set_previous (नोड) वजन को शुरू करने के लिए बिल्ड() को कॉल करेगा)।

अब निम्नलिखित दो NNS बिल्कुल वैसा ही अभिसरण:

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/वैलर-एरर-जब-चेक-लक्ष्य-अपेक्षित-मॉडल-2-टू-आकार-कोई -25-कोई सुझाव नहीं? –

संबंधित मुद्दे