Ich habe ein Tensorflow-Programm mit vier Ausgangsbeschriftungen. Ich habe das Modell trainiert und werte jetzt separate Daten damit aus.Tensorflow tf.nn.in_top_k Fehlerziele [0] liegt außerhalb des Bereichs
Das Problem ist, dass, nachdem ich den Code verwenden
import tensorflow as tf
import main
import Process
import Input
eval_dir = "/Users/Zanhuang/Desktop/NNP/model.ckpt-30"
checkpoint_dir = "/Users/Zanhuang/Desktop/NNP/checkpoint"
def evaluate():
with tf.Graph().as_default() as g:
images, labels = Process.eval_inputs()
forward_propgation_results = Process.forward_propagation(images)
init_op = tf.initialize_all_variables()
saver = tf.train.Saver()
top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1)
with tf.Session(graph=g) as sess:
sess.run(init_op)
saver.restore(sess, eval_dir)
tf.train.start_queue_runners(sess=sess)
print(sess.run(top_k_op))
def main(argv=None):
evaluate()
if __name__ == '__main__':
tf.app.run()
Insgesamt habe ich eine Klasse nur haben.
Mein Code für die Fehlerrate, wo ich die Etiketten in einer One-hot-Matrix einzuführen, ist hier:
def error(forward_propagation_results, labels):
labels = tf.one_hot(labels, 4)
tf.transpose(labels)
labels = tf.cast(labels, tf.float32)
mean_squared_error = tf.square(tf.sub(labels, forward_propagation_results))
cost = tf.reduce_mean(mean_squared_error)
train = tf.train.GradientDescentOptimizer(learning_rate = 0.05).minimize(cost)
tf.histogram_summary('accuracy', mean_squared_error)
tf.add_to_collection('losses', cost)
tf.scalar_summary('LOSS', cost)
return train, cost
Dieser Fehler weist auf eine Diskrepanz zwischen der Form von 'forward_propagation_results' (angenommen als Matrix der Größe' bxc') und den Werten in 'labels' hin (angenommen ein Vektor der Länge' b' mit allen Werten <' c'). Können Sie versuchen, die Anweisung 'print (forward_propagation_result, sess.run (labels))' vor der fehlgeschlagenen Zeile hinzuzufügen? – mrry
Sicher: Das ist mein Ergebnis: (, Array ([40], dtype = int32)) –