2016-11-23 15 views
0

私は以下のようにニューロンネットワークを訓練しようとしますが、良い結果を得ることはできません。 データセットはmnistです。あなたは損失が低いではないことがわかります 私は別のオプティマイザ(Adagrad、SGD、Adam)、異なる学習率を試してみると動作しません。 良い結果が得られる方法はありますか?は深い自動エンコーダニューロンネットワークを訓練できません

ログは==============================エポック75/100 60000分の60000 [

あります] - 271s - 損失:1191.9388
エポック76/100 60000分の60000 [==============================] - 232s - 損失:1191.7773
エポック77/100 60000分の60000 [==============================] - 232s - 損失:1191.6079
エポック78/100 60000分の60000 [==============================] - 207S - 損失: 1191.4511
エポック79/100 60000分の60000 [==============================] - 205S - 損失:1191.2935
エポック80/100 60000/60000 [==============================] - 223S - 損失:1191.1510
エポック81/100 60000分の60000 【==============================] - 243S - 損失:1191.0016
エポック82/100 60000分の60000 [= =============================] - 224S - ロス:1190.8688
エポック83/100 60000分の60000 [=== ===========================] - 214s - ロス:1190.7299
エポック84/100 60000分の60000 [===== ============= - 283年 - 紛失:1190.5929
エポック85/100 60000/60000 [==============] - 243秒 - 損失:1190.4609

auto-encoder network structure

from keras.datasets import mnist 
from keras.models import load_model, Model, Sequential 
from keras.layers import Input, Dense, Activation 
import matplotlib.pyplot as plt 
import numpy as np 
import keras 
import theano 
import os 

(x_train, y_train), (x_test, y_test) = mnist.load_data() 
nx_train=np.reshape(x_train, (x_train.shape[0],x_train.shape[1]*x_train.shape[2])) 

if os.path.isfile('deep_auto_encoder_example.h5'): 
    model=load_model('deep_auto_encoder_example.h5') 
    inputs = model.inputs[0] 
    encoded = model.layers[4].output 
else: 
    inputs = Input(shape=(784,)) 
    en_hid1 = Dense(1000, activation='linear')(inputs) 
    en_hid2 = Dense(500, activation='linear')(en_hid1) 
    en_hid3 = Dense(250, activation='linear')(en_hid2) 
    encoded = Dense(30, activation='linear')(en_hid3) 
    de_hid1 = Dense(250, activation='linear')(encoded) 
    de_hid2 = Dense(500, activation='linear')(de_hid1) 
    de_hid3 = Dense(1000, activation='linear')(de_hid2) 
    decoded = Dense(784)(de_hid3) 
    model = Model(input=inputs, output=decoded) 
    sgd = keras.optimizers.Adagrad(lr=0.0001) 
    model.compile(loss='mean_squared_error', optimizer=sgd) 
    model.fit(nx_train, nx_train, batch_size=32, nb_epoch=100) 
    model.save('deep_auto_encoder_example.h5') 

import scipy.misc 
from PIL import Image 
para_imnum = 10 
imarray=model.predict(nx_train[0:para_imnum**2]) 
ll = [] 
for i in range(para_imnum**2): 
    im = np.reshape(imarray[i],(28,28)) 
    if i ==0: 
     ll = im 
    else: 
     ll = np.concatenate((ll,im), axis=1) 

lh = [] 
ims = np.reshape(np.transpose(ll),(para_imnum,28*para_imnum,28)) 
for i in range(para_imnum): 
    if i==0: 
     lh = np.transpose(ims[i]) 
    else: 
     lh = np.concatenate((lh,np.transpose(ims[i])),axis=0) 

scipy.misc.imsave('deep_auto_encoder_predict.jpg',lh) 


encoder = Model(input=inputs, output=encoded) 

import tsne 
cor_xy = tsne.tsne(encoder.predict(nx_train[:2000])/1000) 
cor_x =[] 
cor_y =[] 
point_c = [] 
c = np.arange(10)/10. 
for i in range(cor_xy.shape[0]): 
    cor_x.append(cor_xy[i][0]) 
    cor_y.append(cor_xy[i][1]) 
    point_c.append(c[y_train[i]]) 
#print(pp) 
plt.scatter(cor_x, cor_y, c=point_c) 
plt.savefig('deep_tsne') 

#plt.show() 
+2

すべての線形活性化とネットワークがイメージとうまく動作しない線形変換、なってしまうので、あなたは、活性化関数として 'relu'を使用してみてください。さらに、損失関数として 'binary_crossentropy'を使用してみてください。 – Jason

+0

@Jason、私はあなたが提案したことをやったが、結果を改善しなかった、さらに悪い。 –

答えて

0

その後半を知っているが、念のためにSBが戻ってきます。異なる非線形性と異なるオプティマイザを試してみてください。少数のレイヤーから始めてから、単純なレイヤーを練習した後にレイヤーを追加してもかまいません。そのような設定で訓練されたレイヤのウェイトをフリーズすることもできます。

関連する問題