TensorFlow restore抛出“没有要保存的变量”

2024-03-29 15:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过一些代码来理解如何在tensorflow中保存和恢复检查点。为此,我实现了一个简单的神经网络,它可以处理MNIST数字并保存.ckpt文件,如下所示:

    from tensorflow.examples.tutorials.mnist import input_data
import numpy as np

learning_rate = 0.001
n_input = 784 # MNIST data input (img shape = 28*28)
n_classes = 10 # MNIST total classes 0-9

#import MNIST data
mnist = input_data.read_data_sets('.', one_hot = True)

#Features and Labels 
features = tf.placeholder(tf.float32, [None, n_input])
labels = tf.placeholder(tf.float32, [None, n_classes])

#Weights and biases
weights = tf.Variable(tf.random_normal([n_input, n_classes]))
bias = tf.Variable(tf.random_normal([n_classes]))

#logits = xW + b
logits = tf.add(tf.matmul(features, weights), bias)

#Define loss and optimizer
cost = tf.reduce_mean(\
  tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\
.minimize(cost)


# Calculate accuracy
correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(labels, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


import math

save_file = './train_model.ckpt'
batch_size = 128
n_epochs = 100

saver = tf.train.Saver()

# Launch the graph
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    # Training cycle
    for epoch in range(n_epochs):
        total_batch = math.ceil(mnist.train.num_examples / batch_size)

        # Loop over all batches
        for i in range(total_batch):
            batch_features, batch_labels = mnist.train.next_batch(batch_size)
            sess.run(
                optimizer,
                feed_dict={features: batch_features, labels: batch_labels})

        # Print status for every 10 epochs
        if epoch % 10 == 0:
            valid_accuracy = sess.run(
                accuracy,
                feed_dict={
                    features: mnist.validation.images,
                    labels: mnist.validation.labels})
            print('Epoch {:<3} - Validation Accuracy: {}'.format(
                epoch,
                valid_accuracy))

    # Save the model
    saver.save(sess, save_file)
    print('Trained Model Saved.')

这部分工作得很好,我将.ckpt文件保存在正确的目录中。当我试图恢复模型以便再次对其进行操作时,问题就出现了。我使用以下代码还原模型:

saver = tf.train.Saver()

with tf.Session() as sess:
  saver.restore(sess, 'train_model.ckpt.meta')
  print('model restored')

最后出现错误:ValueError: No variables to save

不太清楚,这里有什么错。如有任何帮助,我们将不胜感激。提前谢谢


Tags: importinputdatalabelstfbatchtrainclasses