2016-04-24 14 views
2

私がしたいこと: ちょうど2つのクラスでcifar10データセットの畳み込みニューラルネットワークを訓練したいと思います。そして、私が適合モデルを取得したら、すべてのレイヤーを取り込み、入力イメージを再現したいと思います。ですから、私は分類の代わりにネットワークからイメージを取り戻したいと思います。Keras - 列コンボリューションネットワーク、オートエンコーダ出力を得る

私がこれまでに行っているもの:

def copy_freeze_model(model, nlayers = 1): 
    new_model = Sequential() 
    for l in model.layers[:nlayers]: 
     l.trainable = False 
     new_model.add(l) 
    return new_model 

numClasses = 2 
(X_train, Y_train, X_test, Y_test) = load_data(numClasses) 
#Part 1 
rms = RMSprop() 
model = Sequential() 
#input shape: channels, rows, columns 
model.add(Convolution2D(32, 3, 3, border_mode='same', 
         input_shape=(3, 32, 32))) 
model.add(Activation("relu")) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Flatten()) 
model.add(Dense(512)) 
model.add(Activation("relu")) 
model.add(Dropout(0.5)) 
#output layer 
model.add(Dense(numClasses)) 
model.add(Activation('softmax')) 
model.compile(loss='categorical_crossentropy', optimizer=rms,metrics=["accuracy"]) 

model.fit(X_train,Y_train, batch_size=32, nb_epoch=25, 
      verbose=1, validation_split=0.2, 
      callbacks=[EarlyStopping(monitor='val_loss', patience=2)]) 
print('Classifcation rate %02.3f' % model.evaluate(X_test, Y_test)[1]) 

##pull the layers and try to get an output from the network that is image. 

newModel = copy_freeze_model(model, nlayers = 8) 
newModel.add(Dense(1024)) 

newModel.compile(loss='mean_squared_error', optimizer=rms,metrics=["accuracy"]) 
newModel.fit(X_train,X_train, batch_size=32, nb_epoch=25, 
      verbose=1, validation_split=0.2, 
      callbacks=[EarlyStopping(monitor='val_loss', patience=2)]) 
preds = newModel.predict(X_test) 

をまた私が行うとき:

input_shape=(3, 32, 32) 

はこれが3チャンネル(RGB)32×32の画像を意味していますか?

+0

私はそれを考えます非畳み込み層によって畳み込み変換された画像を再現するのが最良のアイデアではないかもしれません。 –

+0

@marcin私は何を提案しますか? – Kevin

答えて

1

あなたが積み重ねた畳み込みオートエンコーダーであることをお勧めします。これにより、アンプール層とデコンボリューションが強制的に行われます。ここでは、(Kerasが構築されている)Theanoで一般的な考え方とコードを見つけることができます:

https://swarbrickjones.wordpress.com/2015/04/29/convolutional-autoencoders-in-pythontheanolasagne/

必要な層の定義例がここで見つけることができます:

https://github.com/fchollet/keras/issues/378