0

Ich versuche, einen Vanilla-Autoencoder mit Keras (mit einem Tensorflow-Backend) zu nehmen und zu stoppen, wenn der Verlustwert auf einen bestimmten Wert konvergiert. Nach der letzten Epoche möchte ich eine Sigmoid-Funktion verwenden, um eine Klassifizierung durchzuführen. Würdest du wissen, wie man das macht (oder mir zumindest in die richtige Richtung weis)?Klassifizierung mit Keras Autoencoder

Der folgende Code ist dem Vanille-Autoencoder bei http://wiseodd.github.io/techblog/2016/12/03/autoencoders/ ziemlich ähnlich. (Ich meine eigenen Daten verwenden, aber ich fühle mich frei, die MNIST Beispiel in der Verbindung zu verwenden, zu zeigen, was Sie reden.)

NUM_ROWS = len(x_train) 
NUM_COLS = len(x_train[0]) 

inputs = Input(shape=(NUM_COLS,)) 
h = Dense(64, activation='sigmoid')(inputs) 
outputs = Dense(NUM_COLS)(h) 

# trying to add last sigmoid layer 
outputs = Dense(1) 
outputs = Activation('sigmoid') 

model = Model(input=inputs, output=outputs) 

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) 
model.fit(x_train, y_train, 
    batch_size=batch, 
    epochs=epochs, 
    validation_data=(x_test, y_test)) 
+0

Hallo, was Ihr x_train ist und was y_train ist? Das sieht nicht wie ein Autoencdoer aus – CAFEBABE

+0

Schauen Sie sich das Beispiel in der Verbindung an. Wenn ich daran arbeite, kann ich mit meinen Daten arbeiten. – quil

+0

Lassen Sie mich die gleiche Frage anders stellen: Was wollen Sie mit dem Auto-Encoder erreichen? Sie könnten ein Standardklassifikationsmodell verwenden. – CAFEBABE

Antwort

0

Ich habe eine Interpretation dessen, was Sie streben, Sie jedoch, scheint selbst kein klares Bild zu haben. Ich denke, Sie können klären, ob Sie den erforderlichen Datensatz selbst vorbereiten.

Eine mögliche Lösung wäre, wie unten sein:

NUM_ROWS = len(x_train) 
NUM_COLS = len(x_train[0]) 

inputs = Input(shape=(NUM_COLS,)) 
h = Dense(64, activation='sigmoid')(inputs) 
outputs = Dense(NUM_COLS)(h) 

model = Model(input=inputs, output=outputs) 

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) 
model.fit(x_train, x_train, 
    batch_size=batch, 
    epochs=epochs, 
    validation_data=(x_test, y_test)) 

h.trainable=False 


# trying to add last sigmoid layer 
outputs = Dense(1)(h) 
outputs = Activation('sigmoid') 

model2.fit(x_train, y_train, 
    batch_size=batch, 
    epochs=epochs, 
    validation_data=(x_test, y_test)) 
+0

Gibt es einen Grund, Sigmoid zweimal anzuwenden? 'h = Dichte (64, Aktivierung = 'Sigmoid') (Eingänge)' 'Ausgänge = Aktivierung ('Sigmoid')' – ksooklall

Verwandte Themen