如何解决ValueError:无法使用Jupyter noteb为python中具有形状“(?,4)”的张量“占位符_1:0”提供形状(230,)的值

2024-10-05 10:21:08 发布

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

我似乎无法解决这个问题,因为我是tensorflow的新手,我认为问题在于图形不匹配 但是解决不了,请帮忙。我想解决这个问题,因为我将在android应用程序中使用它

定义占位符:

x = tf.placeholder(tf.float32,shape=[None,80,80,3])
y_true = tf.placeholder(tf.float32,shape=[None,4])

CNN层:

%%time
#Changing settings for GPU running.
config = tf.ConfigProto(allow_soft_placement=True)
config.gpu_options.allow_growth = True
config.gpu_options.allocator_type = 'BFC'
#Training and saving the result
with tf.Session(config=config) as sess:
    sess.run(init)
    summary_writer = tf.summary.FileWriter(TRAIN_DIR, graph=tf.get_default_graph())
    for i in range(epochs):
        for j in range(0,steps,step_size):            
            _ , c , summary,d = sess.run([train,cross_entropy,merged_summary_op,acc],feed_dict={x:X[j:j+step_size] , y_true:Y[j:j+step_size] ,hold_prob1:0.5,hold_prob2:0.5,hold_prob3:0.5,hold_prob4:0.5})
            summary_writer.add_summary(summary, i * total_batch + j)
            acc_train.append(d)
            mean_of_cross_entropy = sess.run(cross_entropy,feed_dict={x:cv_x,y_true:cv_y ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0})
            mean_of_acc = sess.run(acc,feed_dict={x:cv_x ,y_true:cv_y ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0})
            cross_entropy_list.append(mean_of_cross_entropy)
            acc_list.append(mean_of_acc)
        print(i,mean_of_cross_entropy,mean_of_acc)
    saver.save(sess, "C:\\Users\\blessie\\Desktop\DATASETS - TOMATO LEAF DISEASE\\Models\\CNN_MC.ckpt")
    print("test accuracy = ",np.mean([sess.run(acc,feed_dict={x:test_x[:230],y_true:test_y[:230] ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0}),sess.run(acc,feed_dict={x:test_x[230:460],y_true:test_y[230:460] ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0}),sess.run(acc,feed_dict={x:test_x[460:],y_true:test_y[460:] ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0})]))   
    print("cross_entropy loss = ",np.mean([sess.run(cross_entropy,feed_dict={x:test_x[:230],y_true:test_y[:230] ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0}),sess.run(cross_entropy,feed_dict={x:test_x[230:460],y_true:test_y[230:460] ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0}),sess.run(cross_entropy,feed_dict={x:test_x[460:],y_true:test_y[460:] ,hold_prob1:1.0,hold_prob2:1.0,hold_prob3:1.0,hold_prob4:1.0})]))

运行代码并预处理数据后,我得到一个值错误,指出:

ValueError:无法为具有形状“(?,4)”的张量“占位符_1:0”输入形状(230,)的值

如何解决此问题/错误


Tags: runtesttruetffeeddictaccsess
1条回答
网友
1楼 · 发布于 2024-10-05 10:21:08

您还没有给出完整的代码,但是从错误消息来看,您的y_true占位符似乎提供了形状为[230]的数据,基本上是类型为[None]。因此,将y_true更改为应该可以解决此特定问题:

y_true = tf.placeholder(tf.float32,shape=[None])

但是您之前已经在代码中使用了y_true。因此,cv_y的形状是否正确地作为[None, 4]馈送

我能猜到的另一件特别的事情是,您已经向cv_y提供了一个热编码值,但在随后的代码行中您没有。因此,您可以按如下方式更改代码:

y_true = tf.placeholder(tf.float32,shape=[None])
y_true = tf.one_hot(y_true, 4)

现在,您必须更改cv_y,然后才能将其作为feed_dict传递

cv_y = np.argmax(cv_y, axis=-1)

相关问题 更多 >

    热门问题