Tensorflow Summaries:您必须使用dtype float为占位符张量提供值

时间:2018-01-17 14:50:32

标签: python tensorflow summary

我遇到了一个奇怪的案例,我不知道如何解决这个问题。基本上我正在训练一个多层NN。但是,当我尝试添加摘要时,我收到下一个错误:

Caused by op 'Placeholder_2', defined at:
  File "multilayer.py", line 235, in <module>
    train_model(data, real_output, real_check, args.learning_rate, args.op, args.batch)
  File "multilayer.py", line 120, in train_model
    keep_prob = tf.placeholder(tf.float32)
  File "C:\Users\dangz\Anaconda3\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1599, in placeholder
    return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name)
  File "C:\Users\dangz\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 3090, in _placeholder
    "Placeholder", dtype=dtype, shape=shape, name=name)
  File "C:\Users\dangz\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "C:\Users\dangz\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2956, in create_op
    op_def=op_def)
  File "C:\Users\dangz\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1470, in __init__
    self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_2' with dtype float
         [[Node: Placeholder_2 = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

代码是:

    # Initializing the variables
    init = tf.global_variables_initializer()
    # Merge all the summaries
    summaries = tf.summary.merge_all()
    # Create Saver
    saver = tf.train.Saver()

    with tf.Session() as sess:
    sess.run(init)

    writer = tf.summary.FileWriter(log_path, sess.graph)        

    for i in range(1000):
        #until 1000 
        batch_ini = 50*i
        batch_end = 50*i+50


        batch_xs = data[0][0][batch_ini:batch_end]
        batch_ys = real_output[batch_ini:batch_end]

        if i % 10 == 0:
            train_accuracy = accuracy.eval(feed_dict={
                    x: batch_xs, y_: batch_ys, keep_prob: 1.0})

        curr_loss, cur_accuracy, _, summary = sess.run([cross_entropy, accuracy, train_step, summaries], 
                                                feed_dict={ x: batch_xs, 
                                                            y_: batch_ys, 
                                                            keep_prob: 0.5})

然而,当我从sess.run删除摘要时,我可以训练模型。从错误中它说我必须为keep_prob提供一个值,但我这样做,这是我不理解的部分。删除摘要有效,接下来是我更改的代码行:

curr_loss, cur_accuracy, _ = sess.run([cross_entropy, accuracy, train_step], 
                                                    feed_dict={ x: batch_xs, 
                                                                y_: batch_ys, 
                                                                keep_prob: 0.5})

图形定义(由于stackoverflow格式,for之后的所有内容直到for the crossentropy在for中):

#set up the computation. Definition of the variables.
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
y_ = tf.placeholder(tf.float32, [None, 10])

#declare weights and biases
def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

#convolution and pooling
def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

for i in range(2):
    #First convolutional layer: 32 features per each 5x5 patch
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])

#Reshape x to a 4d tensor
x_image = tf.reshape(x, [-1, 28, 28, 1])

#We convolve x_image with the weight tensor, add the bias, apply the ReLU function, and finally max pool. 
#The max_pool_2x2 method will reduce the image size to 14x14.

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

#Second convolutional layer: 64 features for each 5x5 patch.
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)


#Densely connected layer: Processes the 64 7x7 images with 1024 neurons
#Reshape the tensor from the pooling layer into a batch of vectors, 
#multiply by a weight matrix, add a bias, and apply a ReLU.
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

#drop_out
keep_prob = tf.placeholder(tf.float32, name='keep_prob')
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)


#Readout Layer
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

#Crossentropy
y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
with tf.name_scope('cross_entropy'):            
    deltas = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)
    with tf.name_scope('total'):                
        cross_entropy = tf.reduce_mean(deltas)
        tf.summary.scalar('cross_entropy', cross_entropy)       

''' Optimization Algorithm '''
with tf.name_scope('train_step'):
    train_step = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cross_entropy)

with tf.name_scope("evaluation"):
    with tf.name_scope("correct_prediction"):
        y_p = tf.argmax(y_conv, 1)
        correct_predictions = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
    with tf.name_scope("accuracy"):
        accuracy = tf.reduce_mean(tf.cast(correct_predictions, tf.float32))
        tf.summary.scalar("accuracy", accuracy)

0 个答案:

没有答案