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

Keras/TensorFlow写入TFRecord时触发encode缺参、文件不存在报错

TensorFlow 保存TFRecords 双报错修复方案

触发的报错信息

  • 第一处报错:TypeError: encode() missing 1 required positional argument: 'encoding'
  • 注释第一处报错对应代码后,第二处报错:NotFoundError: 519_IM-2131-2001.dcm.png; No such file or directory [Op:ReadFile]

根因定位

两个报错相互独立,不存在因果关系:

  1. 编码报错:代码中写的caption.str.encode()存在两个问题:一是单条caption是Python原生字符串类型,不存在.str访问器(该访问器是pandas Series专属的字符串处理接口);二是Python原生字符串的encode()方法必须传入编码参数,缺省参数就会触发该类型错误。
  2. 文件找不到报错:传入tf.io.read_file()的图片路径不完整/路径错误,代码未做路径校验直接读取不存在的文件,触发文件不存在错误。

核心报错代码片段

def bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

def create_example(image_path, caption):
    feature = {
        "caption": bytes_feature(caption.str.encode()), # 第一处报错行
        "raw_image": bytes_feature(tf.io.read_file(image_path).numpy()), # 第二处报错行
    }
    return tf.train.Example(features=tf.train.Features(feature=feature))

修复步骤

1. 修正caption编码逻辑

单条字符串直接调用encode方法,传入utf-8编码参数即可,删除多余的.str访问器:

"caption": bytes_feature(caption.encode("utf-8")),

只有批量处理pandas Series格式的caption列时,才需要使用.str.encode("utf-8")写法,遍历得到的单条caption是原生字符串,不需要该访问器。

2. 修正图片路径,增加有效性校验

  • 先确认image_paths列表中存储的是文件名、相对路径还是绝对路径:如果是文件名/相对路径,需要先拼接图片存储的根目录,生成完整绝对路径再传入读取接口
  • 批量写入前过滤掉不存在的路径,避免任务运行中途中断
    参考修复代码:
import os

# 配置图片存储的根目录,替换为你实际的图片文件夹路径
IMAGE_ROOT_DIR = "/path/to/your/dataset/images"

def filter_valid_paths(path_list):
    valid_paths = []
    for path in path_list:
        # 拼接成完整绝对路径
        full_path = path if os.path.isabs(path) else os.path.join(IMAGE_ROOT_DIR, path)
        if os.path.exists(full_path):
            valid_paths.append(full_path)
    return valid_paths

# 初始化训练、验证集路径时先做过滤
train_image_paths = filter_valid_paths(image_paths[:train_size])
valid_image_paths = filter_valid_paths(image_paths[-valid_size:])

3. 写入前验证

正式批量写入前,先打印3-5条处理后的image_path,手动确认路径对应文件存在,再启动全量写入任务即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:45:47