使用TensorFlow创建Dataset时遇'Unbatching a tensor...'错误求助
问题原因
你犯了两个关键错误:
path_masks的定义少了闭合括号,存在语法错误;- 错误地将单个带通配符的路径字符串传入
tf.constant,再用from_tensor_slices处理——该函数要求输入的张量维度≥1(比如路径列表),但单个字符串是标量(维度0),因此触发Unbatching a tensor is only supported for rank >= 1错误。
另外你已经通过list_files获取了图片和掩码的路径数据集,完全没必要再用from_tensor_slices重复构建。
修正方案
方案一:直接合并已有数据集(推荐)
利用tf.data.Dataset.zip将你已经获取的images和masks路径数据集配对,保证顺序完全对应(因为你设置了shuffle=False):
path_imgs = './images/train/*.jpg' path_masks = './masks/train/*.jpg' # 补上缺失的闭合括号 # 获取路径数据集 images = tf.data.Dataset.list_files(path_imgs, shuffle=False) masks = tf.data.Dataset.list_files(path_masks, shuffle=False) # 配对两个数据集 dataset = tf.data.Dataset.zip((images, masks))
方案二:手动生成路径列表后构建数据集
如果想使用from_tensor_slices,需要先将通配符路径解析为实际的路径列表:
import glob path_imgs = './images/train/*.jpg' path_masks = './masks/train/*.jpg' # 解析通配符,获取实际路径列表 img_paths = glob.glob(path_imgs) mask_paths = glob.glob(path_masks) # 校验图片和掩码数量一致,避免配对错误 assert len(img_paths) == len(mask_paths), "图片与掩码数量不匹配" # 构建数据集 dataset = tf.data.Dataset.from_tensor_slices((img_paths, mask_paths))
后续扩展(可选)
可以添加映射函数,直接在数据集中完成图片和掩码的加载:
def load_image(path): img = tf.io.read_file(path) img = tf.image.decode_jpeg(img, channels=3) return img def load_mask(path): mask = tf.io.read_file(path) mask = tf.image.decode_jpeg(mask, channels=1) return mask def load_pair(img_path, mask_path): return load_image(img_path), load_mask(mask_path) # 应用加载逻辑 dataset = dataset.map(load_pair)
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

