2

やりたいこと: cifar10 データセットの畳み込みニューラル ネットワークを 2 つのクラスだけでトレーニングしたいと考えています。次に、適合モデルを取得したら、すべてのレイヤーを取得して、入力画像を再現します。そのため、分類の代わりにネットワークから画像を取得したいと考えています。

私がこれまでに行ったこと:

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 x 32 の画像ということですか?

4

1 に答える 1

1

私がお勧めするのは、スタックされた畳み込みオートエンコーダーです。これにより、レイヤーのアンプーリングとデコンボリューションが必須になります。ここでは、Theano (Keras が構築されている) の一般的なアイデアとコードを見つけることができます。

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

必要なレイヤーの定義例は、次の場所にあります。

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

于 2016-04-26T19:08:53.150 に答える