Python Tensorflow ValueError:使用图像序列设置数组元素

Python Tensorflow ValueError:使用图像序列设置数组元素,python,image,tensorflow,Python,Image,Tensorflow,我浏览了很多论坛网站,试图找到解决方案,但都没有找到 我正在尝试将Tensorflow(Python 3,Win 10 64位)用于我自己的图像集。当我运行它时,我得到一个ValueError。具体而言: Traceback (most recent call last): File "B:\Josh\Programming\Python\imgpredict\predict.py", line 62, in <module> sess.run(train_step, f

我浏览了很多论坛网站,试图找到解决方案,但都没有找到

我正在尝试将Tensorflow(Python 3,Win 10 64位)用于我自己的图像集。当我运行它时,我得到一个ValueError。具体而言:

Traceback (most recent call last):
  File "B:\Josh\Programming\Python\imgpredict\predict.py", line 62, in <module>
    sess.run(train_step, feed_dict={imgs:batchX, lbls: batchY})
  File "C:\Users\Josh\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 789, in run
    run_metadata_ptr)
  File "C:\Users\Josh\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 968, in _run
    np_val = np.asarray(subfeed_val, dtype=subfeed_dtype)
  File "C:\Users\Josh\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\numeric.py", line 531, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: setting an array element with a sequence.
我不知道错误是来自我的图像还是标签。我试过其他SO问题、Reddit、Google Plus、GitHub问题等的很多建议,但都没有用。我的项目GitHub链接是:

项目文件夹为“imgpredict”


谢谢你的帮助。提前感谢

很抱歉,这不是对错误的完整回答,但我发现您的代码中存在许多问题,可能会产生错误

首先是使用
create\u batches
函数。使用图像1的列表,数据的张量,将所有这些张量附加到列表中,然后将该列表转换为numpy数组。这是非常糟糕的做法

第二个问题-它应该
产生图像和标签,但标签根本不在该函数中处理,而是从全局值到达。因此,我看不出有任何理由认为,当您这样做时,它们甚至与图像匹配:

yield(images1[i:i+batch_size],labels_list[i:i+batch_size])
在所有这些之后,您的
batchX
似乎是一个张量列表,因此您再次将它们转换为一个数组(使用
imgs.eval()
)。毕竟,上帝只知道现在数组的实际形状是什么,错误本身通常表示
batchX
不是要从列表转换为数组的适当“矩形”形状(例如,如果其中一个元素是特定长度的数组,而其他元素的长度不同)


我的建议是,重写函数,简化它,不要在其中使用张量,也不要在其中使用正规列表。它应该返回一个简单的numpy数组,该数组的形状适合
sess.run(train\u step,feed\u dict={imgs:batchX,lbls:batchY})

在这种情况下,我认为您看到了这个错误,因为您在运行培训时正在向feed\u dict传递一个tensorflow对象。由于使用了展平方法,它可能是tensorflow对象:

thedata = tf.contrib.layers.flatten(thedata)
它将返回一个展平张量(中的更多信息),由于某些原因,该张量没有被正确计算

接下来要解决此问题,您需要向提要dict提供一个numpy数组。您可以尝试:

thedata.flatten()
这会将阵列展平为向量。我试过了,它至少消除了错误


除此之外,正如所指出的,您的方法还存在一些基本问题。对我来说,最明显的一点是,您正在将权重矩阵初始化为图像大小(512 x 512=262144),但由于您正在加载3通道图像(RGB彩色图像),因此最终会得到一个三倍于该大小(512 x 512 x 3通道=786432)的平坦阵列,因此训练无论如何都会失败。如果颜色对训练数据不重要,请尝试转换为灰度(
thedata=cv2.cvt颜色(thedata,cv2.color\u bgr2 gray
).

谢谢你的建议,我一定会在今天上班时试用。我知道我的262144值有问题……很好,这消除了第一个错误!现在转到下一个错误……谢谢你的帮助:)谢谢你的建议,我上班时会修正我的代码
thedata.flatten()