You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Google ML Engine训练后模型保存失败,请求排查

解决Google ML Engine模型保存阶段的UnicodeDecodeError问题

问题根源

从你的错误栈可以明确定位问题:你用文本模式读取了二进制的Keras模型文件(.h5格式)。错误信息里的0x89是HDF5文件的起始字节标识,它不属于UTF-8文本字符范畴,当代码尝试用UTF-8解码读取的内容时,就触发了UnicodeDecodeError

具体修复方案

修改你代码中的copy_file_to_gcs函数,将文件打开模式从文本模式改为二进制模式即可:

原代码:

def copy_file_to_gcs(job_dir, file_path):
    with file_io.FileIO(file_path, mode='r') as input_f:
        with file_io.FileIO(os.path.join(job_dir, file_path), mode='w+') as output_f:
            output_f.write(input_f.read())

修改后:

def copy_file_to_gcs(job_dir, file_path):
    with file_io.FileIO(file_path, mode='rb') as input_f:
        with file_io.FileIO(os.path.join(job_dir, file_path), mode='wb+') as output_f:
            output_f.write(input_f.read())

为什么这样有效

Keras生成的.h5模型文件是二进制格式的HDF5文件,并非纯文本文件。使用二进制模式(rb/wb+)读写时,代码会直接处理原始字节流,不会自动进行UTF-8编码/解码操作,既避免了编码错误,也能保证文件内容完整复制到GCS存储桶中。

额外说明

虽然你使用的是官方示例代码,但可能在TensorFlow 1.4搭配对应Keras版本的环境下,这个文本模式的细节问题没有被覆盖到。修改为二进制模式后,应该就能顺利完成模型保存和GCS同步的流程了。

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

火山引擎 最新活动