张量流中测试和训练集的形状不兼容

时间:2018-11-07 12:24:33

标签: python tensorflow

我正在尝试使用tensorflow软件包构建CNN网络。我的火车数据集是237张具有100X100的图像,共6个类别,测试集是30个具有相同大小和类别的图像。 一切都进行得很好,除了我想用其测量精度的最后一部分

acc=tf.reduce_mean(tf.cast(matches,tf.float32))

我无法理解为什么在我测试兼容“(30,100,100,1)vs(30,6)”的测试集(数据和标签)时会出错。 谁能解释为什么和什么可行的解决方案。

注意:当我在火车数据上应用批次大小30(等于测试集行的数量)时,它可以工作。我假设模型期望火车和测试集的行数应等于未设置的行数(通常是70%的培训与30%的测试),我检查了一些具有相同错误标题的帖子,但面对却无法理解,我认为尽管错误标题是相同的,但他们的问题有所不同。大多数情况下,它们的扁平层存在问题。

来自数据集信息的屏幕截图 enter image description here

这是简单的代码

…
convo_1=…(x_img,shape=[5,5,1,32])
convo_1_pooling=…(convo_1)

convo_2=…(x_img,shape=[5,5,32,64])
convo_2_pooling=…(convo_2)

convo_3=…(x_img,shape=[5,5,64,128])
convo_3_pooling=…(convo_3)

convo_3_flat=tf.reshape(convo_3_pooling,[-1,13*13*128])
full_layer_one=tf.nn.relu(sp.normal_full_layer(convo_3_flat,21632))

# DROPOUT
hold_prob=tf.placeholder(tf.float32)
full_one_dropout=tf.nn.dropout(full_layer_one,keep_prob=hold_prob)
y_pred=sp.normal_full_layer(full_one_dropout,6)

# LOOS FUNCTION
cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=y_pred))

# OPTIMIZER
optimizer=tf.train.AdamOptimizer(learning_rate=learning_rate)
train=optimizer.minimize(cross_entropy)

with tf.Session() as sess:
    sess.run(init)
    b=0
    for i in range(training_iters):
        sess.run(train,feed_dict={x_img:train_x, y:train_y,hold_prob:.5})
        if i%2 ==0:
            print("NO STEP:{}",format(i))
            print("ACCURACY: ")
            matches=tf.equal(tf.argmax(y_pred,1),tf.argmax(train_y,1))
            acc=tf.reduce_mean(tf.cast(matches,tf.float32))
            print(sess.run(acc,feed_dict={x_img:test_x, y:test_y, hold_prob:1.0}))
            print('\n')

这是错误

InvalidArgumentError: Incompatible shapes: [30] vs. [237]
     [[{{node Equal_1}} = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:CPU:0"](ArgMax_2, ArgMax_3)]]

非常感谢

1 个答案:

答案 0 :(得分:0)

这一定是发生的,因为在训练模型时,您可能使用了 train_x train_y 数据,而不是通过 feed_dict 占位符的值。

我的代码也发生了类似的情况,经过数小时的调试后问题得以解决。