Keras - rede convolução Train, obter a saída de auto-codificador

votos
2

O que eu quero fazer: Quero treinar uma rede neural convolutional no conjunto de dados cifar10 em apenas duas classes. Em seguida, uma vez que recebo o meu modelo ajustado, eu quero tirar todas as camadas e reproduzir a imagem de entrada. Então, eu quero ter uma imagem de volta da rede em vez de uma classificação.

O que tenho feito até agora:

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)

Além disso, quando eu faço:

input_shape=(3, 32, 32)

Faz isso significa um canal 3 (RGB) imagem de 32 x 32?

Publicado 24/04/2016 em 14:13
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

O que eu sugiro que você é um autoencoder convolutional empilhados. Isso faz com que as camadas unpooling e obrigatória de desconvolução. Aqui pode encontrar a idéia geral e código em Teano (em que Keras é construído):

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

Um exemplo de definição de camadas necessários podem ser encontrados aqui:

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

Respondeu 26/04/2016 em 18:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more