2016-11-11 14 views
0

オートエンコーダのコンテナが新しいKerasで削除されていることに注意してください。私の目的は、入力の符号化表現を抽出し、それを次の層、すなわち3つの隠れた層を使用する分類のための積み重ねられた自動符号化器への入力として供給することである。mnistを使用した分類のための積み重ねられたオートエンコーダ

例外:モデルターゲットをチェックしているときにエラーが発生しました:dense_160が形状(なし、500)を持つと予想されましたが、形状(60000L、784L)の配列があります。私はこのコードが私の意図を達成するかどうかはあまり確信していません。私はこれを解決する方法についてのガイドを感謝します。ありがとう。 以下のコードは貼り付けられます:

from keras.layers import Input, Dense 
from keras.models import Model 
from keras.datasets import mnist 
import numpy as np 

nb_classes = 10 
nb_epoch=200 
batch_size=256 
hidden_layer1=784 
hidden_layer2=600 
hidden_layer3=500 
(x_train, y_train), (x_test, y_test) = mnist.load_data() 
x_train = x_train.astype('float32')/255. 
x_test = x_test.astype('float32')/255. 
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) 
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) 
print('Train samples: {}'.format(x_train.shape[0])) 
print('Test samples: {}'.format(x_test.shape[0])) 

from keras.utils import np_utils 
y_train = np_utils.to_categorical(y_train, nb_classes) 
y_test = np_utils.to_categorical(y_test, nb_classes) 

input_img = Input(shape=(784,)) 
encoded = Dense(hidden_layer1, activation='relu')(input_img) 
encoded = Dense(hidden_layer2, activation='relu')(encoded) 
encoded=Dense(hidden_layer3,activation='softmax')(encoded) 
model = Model(input=input_img , output=encoded) 
model.compile(optimizer='rmsprop', 
      loss='categorical_crossentropy', 
      metrics=['accuracy']) 

model.fit(x_train, x_train, 
      nb_epoch=nb_epoch, 
      batch_size=batch_size, 
      shuffle=True, 
      validation_data=(x_test, x_test)) 
score = model.evaluate(x_test, y_test, verbose=0) 

print('Test score before fine turning:', score[0]) 
print('Test accuracy after fine turning:', score[1]) 
+0

@Tang Quoc Thai:答えはありません。あなたのスクリプトは、どの段階でもx_trainを出力としてネットワークを訓練していないので、これはいつでもオートエンコーダーとして機能しません。 – sahdeV

答えて

0

は、私はあなたのコードを修正し、テストし、それが働きました。

nb_classes = 10 
nb_epoch = 5 
batch_size = 256 
hidden_layer1 = 128 
hidden_layer2 = 64 
hidden_layer3 = 10 # because you have 10 categories 
(x_train, y_train), (x_test, y_test) = mnist.load_data() 
x_train = x_train.astype('float32')/255. 
x_test = x_test.astype('float32')/255. 
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) 
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) 
print('Train samples: {}'.format(x_train.shape[0])) 
print('Test samples: {}'.format(x_test.shape[0])) 

from keras.utils import np_utils 

y_train = np_utils.to_categorical(y_train, nb_classes) 
y_test = np_utils.to_categorical(y_test, nb_classes) 

input_img = Input(shape=(784,)) 
encoded = Dense(hidden_layer1, activation='relu')(input_img) 
encoded = Dense(hidden_layer2, activation='relu')(encoded) 
encoded = Dense(hidden_layer3, activation='softmax')(encoded) 
decoded = Dense(hidden_layer2, activation='relu')(encoded) 
decoded = Dense(hidden_layer1, activation='relu')(decoded) 
decoded = Dense(784, activation='sigmoid')(decoded) 

model = Model(input=input_img, output=encoded) 
model.compile(optimizer='rmsprop', 
       loss='categorical_crossentropy', 
       metrics=['accuracy']) 

model.fit(x_train, y_train, 
      nb_epoch=nb_epoch, 
      batch_size=batch_size, 
      shuffle=True, 
      validation_data=(x_test, y_test)) 
score = model.evaluate(x_test, y_test, verbose=1) 

print('/n') 
print('Test score before fine turning:', score[0]) 
print('Test accuracy after fine turning:', score[1]) 
+0

どのように修正しましたか?あなたが何を変えたのか、そしてなぜそれが他の人たちに有用な答えになるのか、少し説明してください。 – Tom

+0

hidden_​​layer3 = 10のサイズは10桁で変更します。 –

関連する問題