2017-06-30 3 views
1

Ich habe Keras oben auf Theano vor, und jetzt möchte Code im Tensorflow-Stil schreiben, die für mich neu ist. Ich habe versucht, ein sehr einfaches Modell zu schreiben (das ich auf Keras implementiert habe und es hat funktioniert), aber der Trainingsprozess scheint nicht zu funktionieren. Das Modell macht immer die gleichen Vorhersagen, egal wie viele Epochen ich durchlaufe, was zeigt, dass das Modell im Trainingsprozess überhaupt nicht aktualisiert wird. Ich denke, ich muss etwas falsch verstanden haben und einen dummen Fehler gemacht haben, kann aber nicht finden, wo es ist.Mit Tensorflow-Schichten, Modell nicht trainiert

Ich bin sicher, dass die Eingabedaten und Beschriftungen korrekt sind, weil ich sie vorher verwendet habe. Die Eingabedaten training_input [0] und training_input [1] sind jeweils 2D-numpy-Arrays. Etiketten sind 1-heiß mit 4 Dimensionen.

def model_1(features, labels): 
    hl_input = features['hl_input'] 
    bd_input = features['bd_input'] 
    encoder = tf.concat([hl_input, bd_input], axis=1) 

    encoder = tf.layers.dense(encoder, 128, activation=tf.nn.relu) 
    decoder = tf.layers.dense(encoder, 64) 
    logits = tf.layers.dense(decoder, 4, activation=tf.nn.softmax) 
    predictions = tf.argmax(logits, 1, name="predictions") 

    loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits) 
    train_op = tf.contrib.layers.optimize_loss(loss, tf.contrib.framework.get_global_step(), optimizer='Adam', 
              learning_rate=0.1) 
    predictions = {"classes": predictions, "probabilities": logits} 

    return predictions, loss, train_op 
... ... 
classifier = tf.contrib.learn.Estimator(model_fn=model_1) 
classifier.fit(x={'hl_input':training_input[0], 'bd_input':training_input[1]}, y=training_labels, batch_size=batch_size, steps=steps) 
+0

OK endlich habe ich mein Problem gefunden. Ich habe ein numpliges Array als ein-Hot-Vektoren anstelle von Tensoren verwendet. Also muss ich eine Zeile 'labels = tf.cast (labels, tf.int32)' hinzufügen. Hoffentlich kann mein Fehler anderen helfen. – ymeng

Antwort

1

Sie aktivieren die Aktivierung zweimal auf der letzten Ebene softmax. Die tf.losses.softmax_cross_entropy Funktion gilt intern softmax, also entfernen Sie die Aktivierung auf logits indem Sie activation=None setzen.

+0

Danke das ist wirklich ein Fehler und ich habe es korrigiert. Es ist jedoch nicht der Grund, warum das Modell überhaupt nicht funktioniert. Nach der Korrektur hat es immer noch das Problem. Ich habe auch die Vorhersagen ausgedruckt, und für jede Eingabe ist die Ausgabe (logits) genau die gleiche. Aus irgendeinem Grund werden entweder die Eingabedaten nicht richtig iteriert oder das Modell ist radikal vorgespannt. Ich werde es mir ansehen. – ymeng

+0

Ich kann nur einen Fehler in dem Code finden, der dort angezeigt wird. Logits wurde als Eingabe übergeben, ich kann seinen Typ nicht als Problem erraten. –

Verwandte Themen