Tensorflow2 Error : Can't convert Python sequence with mixed types to Tensor
Tensorflow2 Error : Can't convert Python sequence with mixed types to Tensor
要了解图像 class化问题,我想使用 tf.data.Dataset class.
加载数据
input_X 值是包含文件路径的列表。
前任。 [/path/to/image1.jpg, /path/to/image2.jpg, ...]
input_Y 值是匹配 input_X 的标签名称列表。
前任。 ['cat', 'cat', 'dog', ...]
我想使用 tf.data.Dataset.from_generator
函数和我的生成器函数加载数据。
下面是我的 generator
代码:
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)
如果我这样做 next(generator)
,我会得到以下输出:
# 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.data.Dataset.from_generator
函数定义数据集如下:
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值是输入的完整路径的一部分,使图片的路径成为绝对路径
而且,train_data[0]是上述图片的路径列表,
train_data[1] 是与上述图像路径匹配的标签名称列表。
但是,我遇到了这些错误:
Can't convert Python sequence with mixed types to Tensor.
我该如何解决这个错误?
我查看了 tensorflow 文档 - 我以前从未使用过的完整披露程序 from_generator
。我相信生成器应该 也 产生张量。您可能想对目标“y”标签进行 1-of-k 编码(例如,“cat”为 0,“dog”为 1),并强制执行某种排序以将文件路径与相应的图像匹配。
要了解图像 class化问题,我想使用 tf.data.Dataset class.
加载数据input_X 值是包含文件路径的列表。
前任。 [/path/to/image1.jpg, /path/to/image2.jpg, ...]
input_Y 值是匹配 input_X 的标签名称列表。
前任。 ['cat', 'cat', 'dog', ...]
我想使用 tf.data.Dataset.from_generator
函数和我的生成器函数加载数据。
下面是我的 generator
代码:
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)
如果我这样做 next(generator)
,我会得到以下输出:
# 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.data.Dataset.from_generator
函数定义数据集如下:
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值是输入的完整路径的一部分,使图片的路径成为绝对路径
而且,train_data[0]是上述图片的路径列表,
train_data[1] 是与上述图像路径匹配的标签名称列表。
但是,我遇到了这些错误:
Can't convert Python sequence with mixed types to Tensor.
我该如何解决这个错误?
我查看了 tensorflow 文档 - 我以前从未使用过的完整披露程序 from_generator
。我相信生成器应该 也 产生张量。您可能想对目标“y”标签进行 1-of-k 编码(例如,“cat”为 0,“dog”为 1),并强制执行某种排序以将文件路径与相应的图像匹配。