ValueError: Невозможно передать значение фигуры, но фигура такая же - PullRequest
0 голосов
/ 24 ноября 2018

Я сделал простой cnn с размером моего изображения 200x200x4, и результат:

layer1:  (?, 100, 100, 32)
layer2:  (?, 50, 50, 64)
#reshape layer2(?x50x50x64) -> layer2_flat(?x160000)

layer2_f:  (?, 160000)
#linear=tf.matmul(w3,l2_flat)+b

linear:  (?, 2)
x:  (?, 160000)   x_data:  (200, 200, 4)
w:  (160000, 2)  x:  (?, 160000)   x_data:  (1, 160000)  b:  (2,)
learning start!!!
(?, 160000)   (1, 160000)    (?, 2)    (2,)

ValueError: Cannot feed value of shape (2,) for 
Tensor 'Placeholder_1:0', which has shape '(?, 2)'

Я сохранил все данные изображений в массиве numpy, и на этапе обучения произошла ошибка.Тем не менее я учусь в колледже (до того, как я написал этот Вопрос, я видел другие вопросы об этой ошибке, но не могу применить ее к моему коду.) Не могли бы вы, ребята, помочь, почему это произошло?

#making layer
tf.reset_default_graph()
x_data=[img1,img2,img3]
y_data=[[0,1],[0,1],[0,1]]
for i in range(0,3):
    y_data[i]=np.array(y_data[i])
x=tf.placeholder(tf.float32,[None,160000])
x_img=tf.reshape(x,[-1,200,200,4])
y=tf.placeholder(tf.float32,[None,2])


#l1
w1=tf.Variable(tf.random_normal([3,3,4,32],stddev=0.01))
l1=tf.nn.conv2d(x_img,w1,strides=[1,1,1,1],padding='SAME')
l1=tf.nn.relu(l1)
l1=tf.nn.max_pool(l1,ksize=[1,2,2,4],strides=    [1,2,2,1],padding='SAME')
print('l1: ',l1.shape)
#in->filter(3x3x1)x32개->padding->relu->max_pool(2x2)
#    strides(1x1)                       strides(2x2)

#l2
w2=tf.Variable(tf.random_normal([3,3,32,64],stddev=0.01))
l2=tf.nn.conv2d(l1,w2,strides=[1,1,1,1],padding='SAME')
tf.nn.relu(l2)
l2=tf.nn.max_pool(l2,ksize=[1,2,2,4],strides=[1,2,2,1],padding='SAME')
print('l2: ',l2.shape)
#50,50,64
l2_flat=tf.reshape(l2,[-1,50*50*64])

#w3
w3=tf.get_variable('w3',shape=[50*50*64,2])
b=tf.Variable(tf.random_normal([2]))
linear=tf.matmul(l2_flat,w3)+b
print('l2_f: ',l2_flat.shape)
print('linear: ',linear.shape)
cost=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(
logits=linear,labels=y))
optimizer=tf.train.AdamOptimizer(learning_rate=0.01).minimize(cost)

print('x: ',x.shape,' ','x_data: ',x_data[1].shape)
sess=tf.Session()
sess.run(tf.global_variables_initializer())

x_data[0]=np.reshape(x_data[0],(1,160000))
x_data[1]=np.reshape(x_data[1],(1,160000))
x_data[2]=np.reshape(x_data[2],(1,160000))

print('w3: ',w3.shape,' x: ',x.shape,' ','x_data: ',x_data[0].shape,
  ' b: ',b.shape)
print('learning start!!!')

for index in range(0,3):
    print(x.shape,' ',x_data[index].shape,'  ',y.shape,'  ',
     y_data[index].shape)

    feed_dict={x:x_data[index],y:y_data[index]}
    c=sess.run([cost],feed_dict=feed_dict)
print('finished!!!')

predict=tf.equal(tf.argmax(linear,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(prediction,tf.float32))
print('accuracy:', sess.run(accuracy,feed_dict=feed_dict))
...