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)
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