2016-04-24 5 views
2

Was ich tun möchte: Ich möchte ein Convolutional Neuronal Netzwerk auf dem Cifar10-Datensatz auf nur zwei Klassen zu trainieren. Wenn ich dann mein angepasstes Modell habe, möchte ich alle Schichten nehmen und das Eingangsbild reproduzieren. Ich möchte also ein Bild aus dem Netzwerk zurückholen, anstatt es zu klassifizieren.Keras - Train Convolution Network, bekommen Auto-Encoder-Ausgang

Was ich bisher getan haben:

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) 

Auch wenn ich das tue:

input_shape=(3, 32, 32) 

Ist dies bedeutet einen 3-Kanal (RGB) 32 x 32 Bild?

+0

Ich denke, es ist vielleicht nicht die beste Idee, um ein konvolutionell transformiertes Bild durch eine nichtkonvolutionäre Schicht zu reproduzieren. –

+0

@marcin was würdest du mir vorschlagen? – Kevin

Antwort