当我尝试运行文章末尾的代码时,遇到了以下错误。但我不清楚我的代码有什么问题。有人能告诉我调试TensorFlow程序的技巧吗?
$ ./main.py Extracting /tmp/data/train-images-idx3-ubyte.gzExtracting /tmp/data/train-labels-idx1-ubyte.gzExtracting /tmp/data/t10k-images-idx3-ubyte.gzExtracting /tmp/data/t10k-labels-idx1-ubyte.gz2017-12-11 22:53:16.061163: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMATraceback (most recent call last): File "./main.py", line 55, in <module> sess.run(opt, feed_dict={x: batch_x, y: batch_y}) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 889, in run run_metadata_ptr) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1120, in _run feed_dict_tensor, options, run_metadata) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1317, in _do_run options, run_metadata) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1336, in _do_call raise type(e)(node_def, op, message)tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value beta1_power [[Node: beta1_power/read = Identity[T=DT_FLOAT, _class=["loc:@Variable"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](beta1_power)]]Caused by op u'beta1_power/read', defined at: File "./main.py", line 46, in <module> opt=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 353, in minimize name=name) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 474, in apply_gradients self._create_slots([_get_variable_for(v) for v in var_list]) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/training/adam.py", line 130, in _create_slots trainable=False) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 1927, in variable caching_device=caching_device, name=name, dtype=dtype) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 213, in __init__ constraint=constraint) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 356, in _init_from_args self._snapshot = array_ops.identity(self._variable, name="read") File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 125, in identity return gen_array_ops.identity(input, name=name) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 2071, in identity "Identity", input=input, name=name) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2956, in create_op op_def=op_def) File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1470, in __init__ self._traceback = self._graph._extract_stack() # pylint: disable=protected-accessFailedPreconditionError (see above for traceback): Attempting to use uninitialized value beta1_power [[Node: beta1_power/read = Identity[T=DT_FLOAT, _class=["loc:@Variable"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](beta1_power)]]
代码如下。它使用了LSTM。
#!/usr/bin/env python# vim: set noexpandtab tabstop=2 shiftwidth=2 softtabstop=-1 fileencoding=utf-8:import tensorflow as tffrom tensorflow.contrib import rnn#import mnist datasetfrom tensorflow.examples.tutorials.mnist import input_datamnist=input_data.read_data_sets("/tmp/data/", one_hot=True)learning_rate=0.001#defining placeholders#input image placeholdertime_steps=28n_input=28x=tf.placeholder("float", [None, time_steps, n_input])#processing the input tensor from [batch_size,n_steps,n_input] to "time_steps" number of [batch_size,n_input] tensorsinput=tf.unstack(x, time_steps, 1)#defining the networknum_units=128lstm_layer = rnn.BasicLSTMCell(num_units, forget_bias=1)outputs,_ = rnn.static_rnn(lstm_layer, input, dtype="float32")#weights and biases of appropriate shape to accomplish above taskn_classes=10out_weights=tf.Variable(tf.random_normal([num_units, n_classes]))out_bias=tf.Variable(tf.random_normal([n_classes]))#converting last output of dimension [batch_size,num_units] to [batch_size,n_classes] by out_weight multiplicationprediction=tf.matmul(outputs[-1], out_weights) + out_biasy=tf.placeholder("float", [None, n_classes])loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))#optimization#model evaluationcorrect_prediction=tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))accuracy=tf.reduce_mean(tf.cast(correct_prediction, tf.float32))#initialize variablesinit=tf.global_variables_initializer()batch_size=128opt=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)with tf.Session() as sess: sess.run(init) iter=1 while iter<800: batch_x, batch_y = mnist.train.next_batch(batch_size=batch_size) batch_x=batch_x.reshape((batch_size, time_steps, n_input)) sess.run(opt, feed_dict={x: batch_x, y: batch_y}) if iter %10==0: acc=sess.run(accuracy,feed_dict={x:batch_x,y:batch_y}) los=sess.run(loss,feed_dict={x:batch_x,y:batch_y}) print("For iter ",iter) print("Accuracy ",acc) print("Loss ",los) print("__________________") iter=iter+1#calculating test accuracytest_data = mnist.test.images[:128].reshape((-1, time_steps, n_input))test_label = mnist.test.labels[:128]print("Testing Accuracy:", sess.run(accuracy, feed_dict={x: test_data, y: test_label}))
回答:
将这两行的顺序调换:
opt=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)init=tf.global_variables_initializer()
由于AdamOptimizer
有自己的变量,你应该在opt
之后定义初始化器init
,而不是在之前。