私がしたいこと: ちょうど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の画像を意味していますか?
私はそれを考えます非畳み込み層によって畳み込み変換された画像を再現するのが最良のアイデアではないかもしれません。 –
@marcin私は何を提案しますか? – Kevin