2016-12-05 81 views
2

我下面这些教程: https://www.youtube.com/watch?v=wuo4JdG3SvU&list=PL9Hr9sNUjfsmEu1ZniY0XpHSzl5uihcXZ
和prettytensor在教程4
介绍在介绍之后,我写了这个代码来运行一个小的神经网络:Prettytensor:试图使用未初始化值

import tensorflow as tf 
# Use PrettyTensor to simplify Neural Network construction. 
import prettytensor as pt 

from tensorflow.examples.tutorials.mnist import input_data 
data = input_data.read_data_sets('../data/MNIST/', one_hot=True) 

# We know that MNIST images are 28 pixels in each dimension. 
img_size = 28 
# Images are stored in one-dimensional arrays of this length. 
img_size_flat = img_size * img_size 
# Tuple with height and width of images used to reshape arrays. 
img_shape = (img_size, img_size) 
# Number of colour channels for the images: 1 channel for gray-scale. 
num_channels = 1 
# Number of classes, one class for each of 10 digits. 
num_classes = 10 

# the placeholders 
x = tf.placeholder(tf.float32, shape=[None, img_size_flat], name='x') 
x_image = tf.reshape(x, [-1, img_size, img_size, num_channels]) 
y_true = tf.placeholder(tf.float32, shape=[None, 10], name='y_true') 

# use prettyTensor to build the model 
# this will give us the predictions and the loss functions 
x_pretty = pt.wrap(x_image) 
with pt.defaults_scope(activation_fn=tf.nn.relu): 
    y_pred, loss = x_pretty.\ 
     conv2d(kernel=5, depth=16, name='layer_conv1').\ 
     max_pool(kernel=2, stride=2).\ 
     conv2d(kernel=5, depth=36, name='layer_conv2').\ 
     max_pool(kernel=2, stride=2).\ 
     flatten().\ 
     fully_connected(size=128, name='layer_fc1').\ 
     softmax_classifier(class_count=10, labels=y_true) 

# the model optimizer 
optimizer = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(loss) 

# the model testing 
correct_prediction = tf.equal(tf.argmax(y_pred,1), tf.argmax(y_true,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 

# start the session 
session = tf.InteractiveSession() 

# Start the training 
tf.global_variables_initializer().run(session = session) 
train_batch_size = 64  
for i in range(1000): 
    print("training batch ",i) 
    x_batch, y_true_batch = data.train.next_batch(train_batch_size) 
    session.run(optimizer, feed_dict={x:x_batch, y_true:y_true_batch}) 

,当我试图运行它,我得到了以下错误:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value layer_conv1/bias 
    [[Node: layer_conv1/bias/read = Identity[T=DT_FLOAT, _class=["loc:@layer_conv1/bias"], _device="/job:localhost/replica:0/task:0/cpu:0"](layer_conv1/bias)]] 

Caused by op u'layer_conv1/bias/read', defined at: 
    File "/home/gal/Documents/Workspace/EclipseWorkspace/Melanoma Classification!/tutorial4/tutorial4Test.py", line 31, in <module> 

完整的错误跟踪:

Traceback (most recent call last): 
    File "/home/gal/Documents/Workspace/EclipseWorkspace/Melanoma Classification!/tutorial4/tutorial4Test.py", line 55, in <module> 
    session.run(optimizer, feed_dict={x:x_batch, y_true:y_true_batch}) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 766, in run 
    run_metadata_ptr) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 964, in _run 
    feed_dict_string, options, run_metadata) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1014, in _do_run 
    target_list, options, run_metadata) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1034, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value layer_conv1/bias 
    [[Node: layer_conv1/bias/read = Identity[T=DT_FLOAT, _class=["loc:@layer_conv1/bias"], _device="/job:localhost/replica:0/task:0/cpu:0"](layer_conv1/bias)]] 

Caused by op u'layer_conv1/bias/read', defined at: 
    File "/home/gal/Documents/Workspace/EclipseWorkspace/Melanoma Classification!/tutorial4/tutorial4Test.py", line 31, in <module> 
    conv2d(kernel=5, depth=16, name='layer_conv1').\ 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/prettytensor/pretty_tensor_class.py", line 1981, in method 
    result = func(non_seq_layer, *args, **kwargs) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/prettytensor/pretty_tensor_image_methods.py", line 163, in __call__ 
    y += self.variable('bias', [size[-1]], bias_init, dt=dtype) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/prettytensor/pretty_tensor_class.py", line 1695, in variable 
    collections=variable_collections) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 1024, in get_variable 
    custom_getter=custom_getter) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 850, in get_variable 
    custom_getter=custom_getter) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 346, in get_variable 
    validate_shape=validate_shape) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 331, in _true_getter 
    caching_device=caching_device, validate_shape=validate_shape) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 677, in _get_single_variable 
    expected_shape=shape) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 224, in __init__ 
    expected_shape=expected_shape) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 370, in _init_from_args 
    self._snapshot = array_ops.identity(self._variable, name="read") 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1424, in identity 
    result = _op_def_lib.apply_op("Identity", input=input, name=name) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op 
    op_def=op_def) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2240, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/home/gal/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1128, in __init__ 
    self._traceback = _extract_stack() 

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value layer_conv1/bias 
    [[Node: layer_conv1/bias/read = Identity[T=DT_FLOAT, _class=["loc:@layer_conv1/bias"], _device="/job:localhost/replica:0/task:0/cpu:0"](layer_conv1/bias)]] 

所以我的问题是,我该如何解决这个错误?

回答

1

此问题是由一个bug在TensorFlow的0.12rc0候选版本造成的,而漂亮的张量使用过时TensorFlow API的事实(我已经打开了issue为此)。

在修复此错误之前,我能想到的最佳解决方法就是破解。在您的程序顶部添加以下行,在import tensorflow as tf之后:

tf.GraphKeys.VARIABLES = tf.GraphKeys.GLOBAL_VARIABLES 
+0

这很奇妙!非常感谢! :) –

+1

看起来这是现在最新版本的PrettyTensor解决了。如果你更新,你不应该再这样做。 – NanoBennett