使用图像和标签的数据框创建 Tensorflow 数据集
Create Tensorflow Dataset with dataframe of images and labels
我想用 tensorflow 创建一个数据集,并将图像作为数组 (dtype=unit8) 并将标签作为字符串提供给它。图像和相应的标签存储在数据框中,列命名为 Image as Array
和 Labels
.
Image as Array (type = array)
Labels (type = string)
img_1
'ok'
img_2
'not ok'
img_3
'ok'
img_4
'ok'
我的挑战:我不知道如何从数据框中提供数据集,大多数教程更喜欢从目录加载数据的方式。
谢谢你的转发,希望你能帮我加载数据集中的图像。
一种可能是使用range
创建索引数据集,然后将数组和标签映射到一起。
# array
img = np.random.rand(4, 2, 2, 2)
label = np.array(['ok', 'not ok', 'ok', 'ok'])
# convert to tf constant
img = tf.constant(img)
label = tf.constant(label)
# create dataset with 0 - 3 index
dataset = tf.data.Dataset.range(len(label))
# map dataset
dataset = dataset.map(lambda x: (img[x, :, :, :], label[x]))
输出:
<MapDataset element_spec=(TensorSpec(shape=(2, 2, 2), dtype=tf.float64, name=None), TensorSpec(shape=(), dtype=tf.string, name=None))>
输出列表-第二个idx:
for i in dataset:
print(list(i)[1])
tf.Tensor(b'ok', shape=(), dtype=string)
tf.Tensor(b'not ok', shape=(), dtype=string)
tf.Tensor(b'ok', shape=(), dtype=string)
tf.Tensor(b'ok', shape=(), dtype=string)
您实际上可以将数据帧直接传递给 tf.data.Dataset.from_tensor_slices
:
import tensorflow as tf
import numpy as np
import pandas as pd
df = pd.DataFrame(data={'images': [np.random.random((64, 64, 3)) for _ in range(100)],
'labels': ['ok', 'not ok']*50})
dataset = tf.data.Dataset.from_tensor_slices((list(df['images'].values), df['labels'].values)).batch(2)
for x, y in dataset.take(1):
print(x.shape, y)
# (2, 64, 64, 3) tf.Tensor([b'ok' b'not ok'], shape=(2,), dtype=string)
我想用 tensorflow 创建一个数据集,并将图像作为数组 (dtype=unit8) 并将标签作为字符串提供给它。图像和相应的标签存储在数据框中,列命名为 Image as Array
和 Labels
.
Image as Array (type = array) | Labels (type = string) |
---|---|
img_1 | 'ok' |
img_2 | 'not ok' |
img_3 | 'ok' |
img_4 | 'ok' |
我的挑战:我不知道如何从数据框中提供数据集,大多数教程更喜欢从目录加载数据的方式。
谢谢你的转发,希望你能帮我加载数据集中的图像。
一种可能是使用range
创建索引数据集,然后将数组和标签映射到一起。
# array
img = np.random.rand(4, 2, 2, 2)
label = np.array(['ok', 'not ok', 'ok', 'ok'])
# convert to tf constant
img = tf.constant(img)
label = tf.constant(label)
# create dataset with 0 - 3 index
dataset = tf.data.Dataset.range(len(label))
# map dataset
dataset = dataset.map(lambda x: (img[x, :, :, :], label[x]))
输出:
<MapDataset element_spec=(TensorSpec(shape=(2, 2, 2), dtype=tf.float64, name=None), TensorSpec(shape=(), dtype=tf.string, name=None))>
输出列表-第二个idx:
for i in dataset:
print(list(i)[1])
tf.Tensor(b'ok', shape=(), dtype=string)
tf.Tensor(b'not ok', shape=(), dtype=string)
tf.Tensor(b'ok', shape=(), dtype=string)
tf.Tensor(b'ok', shape=(), dtype=string)
您实际上可以将数据帧直接传递给 tf.data.Dataset.from_tensor_slices
:
import tensorflow as tf
import numpy as np
import pandas as pd
df = pd.DataFrame(data={'images': [np.random.random((64, 64, 3)) for _ in range(100)],
'labels': ['ok', 'not ok']*50})
dataset = tf.data.Dataset.from_tensor_slices((list(df['images'].values), df['labels'].values)).batch(2)
for x, y in dataset.take(1):
print(x.shape, y)
# (2, 64, 64, 3) tf.Tensor([b'ok' b'not ok'], shape=(2,), dtype=string)