2 votes

Keras - Entraîner le réseau de convolution, obtenir la sortie de l'auto-encodeur

Ce que je veux faire : Je veux entraîner un réseau de neurones convolutif sur le jeu de données cifar10 sur seulement deux classes. Ensuite, une fois que j'ai obtenu mon modèle ajusté, je veux prendre toutes les couches et reproduire l'image d'entrée. Je veux donc que le réseau me renvoie une image au lieu d'une classification.

Ce que j'ai fait jusqu'à présent :

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)

Aussi quand je le fais :

input_shape=(3, 32, 32)

Cela signifie-t-il une image 32 x 32 à 3 canaux (RVB) ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X