ValueError:在TensorFlow中使用feed_dict时设置带有序列的数组元素

时间:2016-04-21 01:42:16

标签: python arrays numpy tensorflow

我正在尝试在进行训练时输入包含正确标签的Tensor。

整个训练数据集的正确标签包含在一个张量中,该张量已从numpy数组转换而来:

numpy_label = np.zeros((614,5),dtype=np.float32)

for i  in range(614):
    numpy_label[i,label_numbers[i]-1] = 1

# Convert to tensor
y_label_all = tf.convert_to_tensor(numpy_label,dtype=tf.float32)

我有一个占位符,用于为每个批次添加正确的标签:

images_per_batch = 5
y_label = tf.placeholder(tf.float32,shape=[images_per_batch,5])

在每个培训步骤中,我将y_label_all的相应部分剪切为y_,并希望将其作为y_label提供:

for step in range(100):

    # Slice correct labels for current batch
    y_ = tf.slice(y_label_all,[step,0],[images_per_batch,5])

    # Train
    _, loss_value = sess.run([train_step,loss],feed_dict={y_label:y_})

这会产生错误:

_, loss_value = sess.run([train_step,loss],feed_dict={y_label:y_})
  File "/usr/local/lib/python2.7/dist-    packages/tensorflow/python/client/session.py", line 357, in run
np_val = np.array(subfeed_val, dtype=subfeed_t.dtype.as_numpy_dtype)
ValueError: setting an array element with a sequence.

变量的形状y_y_label

#y_: 
Tensor("Slice:0", shape=TensorShape([Dimension(5), Dimension(5)]), dtype=float32)

#y_label: 
Tensor("Placeholder:0", shape=TensorShape([Dimension(5), Dimension(5)]), dtype=float32)

我不明白出了什么问题?显然它与numpy有关 - 但是现在我已经将numpy数组转换为张量,这会影响到什么吗?

非常感谢帮助和见解。谢谢!

1 个答案:

答案 0 :(得分:2)

问题是feed_dict必须与numpy数组兼容。

您的代码会产生类似的结果

np.array(<tf.Tensor 'Slice_5:0' shape=(5, 5) dtype=float32>, dtype=np.float32)

上面的神秘错误导致numpy失败。要修复它,您需要将Tensor转换为numpy,如下所示

for step in range(100):

    # Slice correct labels for current batch
    y_ = tf.slice(y_label_all,[step,0],[images_per_batch,5])
    y0 = sess.run([y_])

    # Train
    _, loss_value = sess.run([train_step,loss],feed_dict={y_label:y0})