当前位置:  开发笔记 > 编程语言 > 正文

Tensorflow(python):train_step.run中的"ValueError:设置带序列的数组元素"(...)

如何解决《Tensorflow(python):train_step.run中的"ValueError:设置带序列的数组元素"()》经验,为你挑选了2个好方法。

我正在尝试使用我自己的一组图像来训练一个简单的逻辑回归模型,但是当我尝试训练模型时,我收到了这个错误:

Traceback (most recent call last):
File "main.py", line 26, in 
model.entrenar_modelo(sess, training_images, training_labels)
File "/home/jr/Desktop/Dropbox/Machine_Learning/TF/Míos/Hip/model_log_reg.py", line 24, in entrenar_modelo
train_step.run({x: batch_xs, y_: batch_ys})
File "/home/jr/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1267, in run
_run_using_default_session(self, feed_dict, self.graph, session)
File "/home/jr/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2763, in _run_using_default_session
session.run(operation, feed_dict)
File "/home/jr/.local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 334, in run
np_val = np.array(subfeed_val, dtype=subfeed_t.dtype.as_numpy_dtype)
ValueError: setting an array element with a sequence.

我要喂的数据train_step.run({x: batch_xs, y_: batch_ys})是这样的:

batch_xs:表示100x100(10,000个长张量)图像的张量对象列表

batch_ys:标签列表为浮点数(1.0或0.0)

我究竟做错了什么?Thx提前!

编辑1:它接缝问题是我必须batch_xs在传递它们之前评估张量train_step.run(...).我认为run方法可以解决这个问题,但我想我错了?无论如何,所以一旦我在调用函数之前这样做了:

for i, x in enumerate(batch_xs):
    batch_xs[i] = x.eval()
    #print batch_xs[i].shape
    #assert all(x.shape == (100, 100, 3) for x in batch_xs)
# Now I can call the function

编辑2:即使按照以下答案中的建议,我也有几个问题.我终于通过抛弃张量并使用numpy数组来修复所有内容.

希望这有助于其他人



1> mdaoust..:

这个特殊的错误正在出现numpy.调用np.array具有不一致尺寸的序列可以抛出它.

>>> np.array([1,2,3,[4,5,6]])

ValueError: setting an array element with a sequence.

看起来它确实失败了,tf确保了所有元素feed_dict都是numpy.arrays.

检查你的feed_dict.



2> mrry..:

(也和)的feed_dict参数接受一个字典映射对象(通常是张量)到一个numpy数组(或者可以简单地转换为numpy数组的对象).Operation.run()Session.run()Tensor.eval()Tensortf.placeholder()

在你的情况下,你传递batch_xs,这是一个numpy数组的列表,TensorFlow不知道如何将其转换为numpy数组.假设这个batch_xs定义如下:

batch_xs = [np.random.rand(100, 100),
            np.random.rand(100, 100),
            ...,                       # 29 rows omitted.
            np.random.rand(100, 100)]  # len(batch_xs) == 32.

我们可以使用以下代码转换batch_xs32 x 100 x 100数组:

# Convert each 100 x 100 element to 1 x 100 x 100, then vstack to concatenate.
batch_xs = np.vstack([np.expand_dims(x, 0) for x in batch_xs])
print batch_xs.shape
# ==> (32, 100, 100) 

请注意,如果batch_ys是浮点数列表,它将由TensorFlow透明地转换为1-D numpy数组,因此您不需要转换此参数.

编辑: mdaoust在注释中提出了一个有效点:如果你将数组列表传递给np.array(因此作为a中的值feed_dict),它将自动vstack编辑,因此不需要按照我的建议转换输入.相反,听起来你的列表元素的形状不匹配.尝试添加以下内容:

assert all(x.shape == (100, 100) for x in batch_xs)

...在致电之前train_step.run(),这应该揭示你是否有不匹配.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有