当前位置: 首页 > 知识库问答 >
问题:

Tensorflow2错误:无法将混合类型的Python序列转换为Tensor

范俊逸
2023-03-14

为了了解图像分类问题,我想使用tf加载数据。数据数据集类。

输入_X值是一个包含文件路径的列表
ex.[path/to/image1.jpg,/path/to/image2.jpg,…]

input_Y值是与input_X匹配的标签名称列表。
例如。['cat','cat','dog',…]

我想使用tf加载数据。数据数据集。来自_生成器功能和我的生成器功能。

下面是我的生成器代码:

def get_generator(self, dataset, full_path, category_names, input_shape):
    images = dataset[0]
    labels = dataset[1]
    ih, iw = input_shape[0:2]

    images = self.attach_fullpath(images, full_path)
    for data in zip(images, labels):
        imagename, labelname = data

        image = cv2.imread(imagename)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        image = tf.image.resize(image, [ih, iw])
        image = tf.cast(image, tf.float32)
        image = image / 255.0

        label = tf.one_hot(category_names.index(labelname), depth=len(category_names))
        label = tf.cast(label, tf.float32)

    yield (image, label)

如果执行下一步(生成器),我将获得以下输出:

# X data
tf.Tensor(
[[[0.31978127 0.20193568 0.20587036]
  [0.33178368 0.21166316 0.20612068]
  [0.34334144 0.2161987  0.19959025]
  ...
  [0.42936707 0.2707099  0.1780539 ]
  [0.41268054 0.26256576 0.16227722]
  [0.4328849  0.28778687 0.18582608]]], shape=(299, 299, 3), dtype=float32)

# Y data
tf.Tensor([0. 0. 1.], shape=(3,), dtype=float32)

定义了这个生成器之后,我使用tf定义了数据集。数据数据集。从_生成器功能如下:

dataset = tf.data.Dataset.from_generator(self.get_generator, 
                                         (tf.float32, tf.float32),
                                         args=(train_data, 
                                               self.full_path, 
                                               ['omelette', 'pizza', 'samosa'], 
                                               (299, 299, 3)))
dataset = dataset.batch(8)

这里,full_path值是输入的完整路径的一部分,以使图像的路径成为绝对路径。

并且,列u数据[0]是上述图像路径的列表,
并且列u数据[1]是匹配上述图像路径的标签名称的列表。

然而,我得到了这些错误:

Can't convert Python sequence with mixed types to Tensor.

如何解决这个错误?

共有1个答案

毋修为
2023-03-14

我偷看了一下tenstorflow文档-完全披露,我以前没有使用过from_generator。我相信生成器也应该产生张量。您可能希望在目标y标签上进行1/k编码(例如cat是0,dog是1),然后强制执行某种排序以将文件路径匹配到相应的图像。

 类似资料: