我有一个医学图像数据集(.dcm
),我可以批量读取TensorFlow
。但是我遇到的问题是这些图像的标签是在一个.csv
中。.csv
文件包含两列—image_path
(图像的位置)和image_labels
(0表示no;1代表是)。我想知道如何将标签批量读取到TensorFlow
数据集中。我使用以下代码来批量加载图像:-
import tensorflow as tf
import tensorflow_io as tfio
def process_image(filename):
image_bytes = tf.io.read_file(filename)
image = tf.squeeze(
tfio.image.decode_dicom_image(image_bytes, on_error='strict', dtype=tf.uint16),
axis = 0
)
x = tfio.image.decode_dicom_data(image_bytes, tfio.image.dicom_tags.PhotometricInterpretation)
image = (image - tf.reduce_min(image))/(tf.reduce_max(image) - tf.reduce_min(image))
if(x == "MONOCHROME1"):
image = 1 - image
image = image*255
image = tf.cast(tf.image.resize(image, (512, 512)),tf.uint8)
return image
# train_images is a list containing the locations of .dcm images
dataset = tf.data.Dataset.from_tensor_slices(train_images)
dataset = dataset.map(process_image, num_parallel_calls=4).batch(50)
因此,我可以将图像加载到TensorFlow
数据集中。但是我想知道如何批量加载图像标签。
应该像这样代替最后两行:
#train_labels is a list of labels for each image in the same order as in train_images
dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
dataset = dataset.map(lambda x,y : (process_image(x), y), num_parallel_calls=4).batch(50)
现在dataset
可以传递到你的网络的.fit()
,.predict()
和其他方法:
model.fit(dataset, epochs=epochs, callbacks=callbacks)
或者,您可以创建包含标签的第二个数据集,然后使用tf.data.Dataset.zip()组合两个数据集。它的工作原理类似于python的原生zip
。
我更喜欢第一种方法,因为它对我来说感觉更干净,例如,我可以打乱文件名/标签,然后才解析文件,而不是相反。