Ich arbeite an einem LSTM, der Text generiert, und ich habe Probleme, zuvor trainierte Modelle wiederzuverwenden. Ich habe meinen Code unten unter Verwendung der tensorflow website als Ressource aufgeteilt.Probleme beim Speichern und Wiederherstellen des Tensorflow-Modells (LSTM)
Hier stelle ich alle meine Variablen:
graph = tf.Graph()
with graph.as_default():
global_step = tf.Variable(0)
data = tf.placeholder(tf.float32, [batch_size, len_section, char_size])
labels = tf.placeholder(tf.float32, [batch_size, char_size])
.....
#Reset at the beginning of each test
reset_test_state = tf.group(test_output.assign(tf.zeros([1, hidden_nodes])),
test_state.assign(tf.zeros([1, hidden_nodes])))
#LSTM
test_output, test_state = lstm(test_data, test_output, test_state)
test_prediction = tf.nn.softmax(tf.matmul(test_output, w) + b)
saver = tf.train.Saver()
Hier trainiere ich mein Modell und einen Kontrollpunkt bei 30 Iterationen
with tf.Session(graph = graph) as sess:
tf.global_variables_initializer().run()
offset = 0
for step in range(10000):
offset = offset % len(X)
if offset <= (len(X) - batch_size):
batch_data = X[offset: offset + batch_size]
batch_labels = y[offset:offset+batch_size]
offset += batch_size
else:
to_add = batch_size - (len(X) - offset)
batch_data = np.concatenate((X[offset: len(X)], X[0: to_add]))
batch_labels = np.concatenate((y[offset: len(X)], y[0: to_add]))
offset = to_add
_, training_loss = sess.run([optimizer, loss], feed_dict = {data : batch_data, labels : batch_labels})
if step % 10 == 0:
print('training loss at step %d: %.2f (%s)' % (step, training_loss, datetime.datetime.now()))
if step % save_every == 0:
saver.save(sess, checkpoint_directory + '/model.ckpt', global_step=step)
if step == 30:
break
ich in diesem Verzeichnis suchen zu sparen und die folgenden Dateien waren erstellt:
Her e ich trainierte Modell angeblich bin Wiederherstellung und Test es:
with tf.Session(graph=graph) as sess:
#standard init step
offset = 0
saver = tf.train.Saver()
saver.restore(sess, "/ckpt/model-150.meta")
tf.global_variables_initializer().run()
test_start = "I plan to make this world a better place "
test_generated = test_start
....
dies Nachdem ich bekomme ich folgende Fehlermeldung:
DataLossError (see above for traceback): Unable to open table file /ckpt/model.ckpt-30.meta: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
Ich bin nicht ganz sicher, was ich falsch mache. Das Tutorial scheint ziemlich einfach zu sein, aber mir fehlt offensichtlich etwas. Jede Art von Feedback würde sehr geschätzt werden.