Ich bin ziemlich neu in Tensorflow und experimentiere derzeit mit Modellen unterschiedlicher Komplexität. Ich habe ein Problem mit der Speicher- und Wiederherstellungsfunktion des Pakets. Soweit ich die Tutorials verstanden habe, sollte ich in der Lage sein, einen trainierten Graphen wiederherzustellen und ihn später mit einigen neuen Eingaben auszuführen. Allerdings habe ich die folgende Fehlermeldung erhalten, wenn ich versuche nur, dass .:Wiederherstellen eines Modells mit variabler Eingangslänge in Tensorflow Ergebnisse in InvalidArgumentError
InvalidArgumentError (siehe oben für Traceback) zu tun: Shape [-1,10] hat negative Dimensionen [[Knoten: Platzhalter = Placeholderdtype = DT_FLOAT , Form = [?, 10], _device = "/ Job: localhost/Replik: 0/Aufgabe: 0/cpu: 0"]]
Mein Verständnis der Nachricht, dass die restaurierte graph nicht mag eine Dimension, die willkürlich bleibt, was wiederum für praktische Fälle notwendig ist, in denen ich nicht vorher weiß, wie groß meine Eingabe sein wird. Ein Codeschnipsel als minimales Beispiel, das den obigen Fehler hervorbringt, finden Sie weiter unten. Ich weiß, wie man jeden Tensor einzeln wiederherstellt, aber das wird ziemlich schnell unpraktisch, wenn die Komplexität der Modelle zunimmt. Ich bin dankbar für jede Hilfe, die ich bekomme und entschuldige mich, falls meine Frage dumm ist.
import numpy as np
import tensorflow as tf
def generate_random_input():
alist = []
for _ in range(10):
alist.append(np.random.uniform(-1, 1, 100))
return np.array(alist).T
def generate_random_target():
return np.random.uniform(-1, 1, 100)
x = tf.placeholder('float', [None, 10])
y = tf.placeholder('float')
# the model
w1 = tf.get_variable('w1', [10, 1], dtype=tf.float32, initializer=tf.contrib.layers.xavier_initializer(seed=1))
b1 = tf.get_variable('b1', [1], dtype=tf.float32, initializer=tf.contrib.layers.xavier_initializer(seed=1))
result = tf.add(tf.matmul(x, w1), b1, name='result')
loss = tf.reduce_mean(tf.losses.mean_squared_error(predictions=result, labels=y))
optimizer = tf.train.AdamOptimizer(0.03).minimize(loss)
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run([optimizer, loss], feed_dict={x: generate_random_input(), y: generate_random_target()})
saver.save(sess, 'file_name')
# now load the model in another session:
sess2 = tf.Session()
saver = tf.train.import_meta_graph('file_name.meta')
saver.restore(sess2, tf.train.latest_checkpoint('./'))
graph = tf.get_default_graph()
pred = graph.get_operation_by_name('result')
test_result = sess2.run(pred, feed_dict={x: generate_random_input()})
kann es ein Problem von Tensorflow sein. Versuchen Sie, die Sparemethode zu überprüfen, oder entfernen Sie einfach den Sparer. Probieren Sie es aus. – jowett