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

开发手写转文本AI遇ValueError:数据基数不明确问题求助

解决手写文本转普通文本AI训练中的数据基数不匹配问题

错误原因

报错ValueError: Data cardinality is ambiguous的核心问题是输入图片样本数与标签样本数不匹配:

  • 输入图片images的样本数为8(对应8张图片)
  • 处理后的标签labels样本数被错误处理为1,导致两者无法对齐

问题分析

你的combined_labels.csv存储了一行8个用逗号分隔的标签(每个对应一张图片),但原代码的标签处理逻辑存在错误:

  1. pd.read_csv("combined_labels.csv", names=["labels"])将整行数据读成1行1列的DataFrame
  2. str.split(",", expand=True)拆分后得到1行8列的结构,此时标签数组形状为(1, 8),代表1个样本对应8个标签,与8个图片样本完全错位
  3. 后续的flatten()无法修正样本数不匹配的问题

解决方案

方法1:直接读取并转换标签(推荐)

跳过pandas的复杂处理,直接读取文件并拆分标签,确保每个标签对应一张图片:

import numpy as np

# 读取标签文件内容
with open("combined_labels.csv", "r") as f:
    label_line = f.read().strip()

# 拆分出8个标签字符串(对应8张图片)
label_str_list = label_line.split(",")

# 将每个标签字符串转换为数字序列
labels = []
for label_str in label_str_list:
    # 分割空格分隔的数字并转为整数
    num_sequence = list(map(int, label_str.strip().split()))
    labels.append(num_sequence)

# 转换为numpy数组(若序列长度不一,保留object类型;若长度统一可指定int类型)
labels = np.array(labels, dtype=object)

方法2:修正原pandas处理逻辑

如果坚持用pandas,需要将拆分后的标签结构转置,匹配图片样本数:

import pandas as pd
import numpy as np

combined_labels = pd.read_csv("combined_labels.csv", names=["labels"])
# 拆分标签为1行8列
combined_labels = combined_labels["labels"].str.split(",", expand=True)
# 转置为8行1列,匹配图片样本数
combined_labels = combined_labels.T
# 提取标签字符串并转换为数字序列
labels = combined_labels[0].apply(lambda s: list(map(int, s.strip().split()))).values

验证与后续注意事项

  1. 检查数据形状:处理后len(images)和len(labels)都应为8,确保样本一一对应
  2. 适配模型需求:由于是手写文本转普通文本(序列预测任务),若使用CTC损失,还需额外处理标签长度、输入序列长度等参数,确保格式符合模型要求

内容的提问来源于stack exchange,提问作者Tetie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:20:47