我有一個帶有所有影像的張量切片和一個帶有掩蔽影像的張量。我如何組合/加入/添加它們并使其成為單個張量資料集tf.data.dataset
# turning them into tensor data
val_img_data = tf.data.Dataset.from_tensor_slices(np.array(all_val_img))
val_mask_data = tf.data.Dataset.from_tensor_slices(np.array(all_val_mask))
然后我將一個函式映射到路徑以使它們影像
val_img_tensor = val_img_data.map(get_image)
val_mask_tensor = val_mask_data.map(get_image)
所以現在我有兩個張量一個影像和另一個掩碼。我如何加入它們并使其成為張量資料組合?
我試著壓縮它們:它沒有用。
val_data = tf.data.Dataset.from_tensor_slices(zip(val_img_tensor, val_mask_tensor))
錯誤
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/data/util/structure.py in normalize_element(element, element_signature)
101 if spec is None:
--> 102 spec = type_spec_from_value(t, use_fallback=False)
103 except TypeError:
11 frames
TypeError: Could not build a `TypeSpec` for <zip object at 0x7f08f3862050> with type zip
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
100 dtype = dtypes.as_dtype(dtype).as_datatype_enum
101 ctx.ensure_initialized()
--> 102 return ops.EagerTensor(value, ctx.device_name, dtype)
103
104
ValueError: Attempt to convert a value (<zip object at 0x7f08f3862050>) with an unsupported type (<class 'zip'>) to a Tensor.
uj5u.com熱心網友回復:
Djinn 的評論主要是您需要遵循的。這是端到端的答案。以下是如何構建用于分割模型訓練的資料管道,通常是一個同時具有images, masks.
首先,獲取示例路徑。
images = [
1.jpg,
2.jpg,
3.jpg, ...
]
masks = [
1.png,
2.png,
3.png, ...
]
其次,定義超引數,即影像大小、批量大小等。并構建tf.dataAPI 輸入管道。
IMAGE_SIZE = 128
BATCH_SIZE = 86
def read_image(image_path, mask=False):
image = tf.io.read_file(image_path)
if mask:
image = tf.image.decode_png(image, channels=1)
image.set_shape([None, None, 1])
image = tf.image.resize(images=image, size=[IMAGE_SIZE, IMAGE_SIZE])
image = tf.cast(image, tf.int32)
else:
image = tf.image.decode_png(image, channels=3)
image.set_shape([None, None, 3])
image = tf.image.resize(images=image, size=[IMAGE_SIZE, IMAGE_SIZE])
image = image / 255.
return image
def load_data(image_list, mask_list):
image = read_image(image_list)
mask = read_image(mask_list, mask=True)
return image, mask
def data_generator(image_list, mask_list, split='train'):
dataset = tf.data.Dataset.from_tensor_slices((image_list, mask_list))
dataset = dataset.shuffle(8*BATCH_SIZE) if split == 'train' else dataset
dataset = dataset.map(load_data, num_parallel_calls=tf.data.AUTOTUNE)
dataset = dataset.batch(BATCH_SIZE, drop_remainder=True)
dataset = dataset.prefetch(tf.data.AUTOTUNE)
return dataset
最后,將影像路徑串列(影像 掩碼)傳遞給構建資料生成器。
train_dataset = data_generator(images, masks)
image, mask = next(iter(train_dataset.take(1)))
print(image.shape, mask.shape)
(86, 128, 128, 3) (86, 128, 128, 1)
在這里您可以看到,tf.data.Dataset.from_tensor_slices成功加載訓練對并以元組形式回傳(無需壓縮)。希望它能解決您的問題。我還回答了您關于增強管道的其他問題,請點擊此處。要添加更多內容,請查看以下資源,我分享了很多語意分割建模方法。它可能會有所幫助。
- Carvana 影像語意分割:入門
- 斯坦福背景場景理解:入門
- 視網膜血管分割:入門
uj5u.com熱心網友回復:
也許嘗試tf.data.Dataset.zip:
val_data = tf.data.Dataset.zip((val_img_tensor, val_mask_tensor))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/511502.html
上一篇:如何讓事件冒泡
