You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TensorFlow创建Dataset时遇'Unbatching a tensor...'错误求助

问题原因

你犯了两个关键错误:

  1. path_masks的定义少了闭合括号,存在语法错误;
  2. 错误地将单个带通配符的路径字符串传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:55:36