使用LPOT量化TensorFlow模型时fashion-mnist数据集匹配报错如何解决
问题排查与解决方案
报错根因
- 配置文件中指定的数据集类型为
ImageRecord,该类型专门用于读取TensorFlow TFRecord格式的数据集,默认会匹配命名格式为*-*-of-*的TFRecord分片文件 - 你当前目录下的fashion-mnist数据集是Keras默认下载的原生
ubyte.gz压缩格式,和ImageRecord要求的格式完全不匹配,因此触发路径匹配失败的报错 - 额外注意:配置中使用的
BilinearImagenet变换是针对ImageNet三通道彩色图像设计的,也不匹配fashion-mnist单通道28*28的输入格式,解决路径问题后仍会引发报错
解决方案
方案1:修改配置适配现有数据集(推荐,无需转格式)
- 无需在yaml配置文件中指定dataloader,直接在量化代码中通过Keras接口加载fashion-mnist数据集,构造校准和评估用的dataloader,再传入LPOT的Quantization接口即可,示例代码片段:
from tensorflow.keras.datasets import fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data() # 按需做resize、归一化、通道扩展等预处理,匹配模型输入要求 # 构造dataloader后传入lpot from lpot import Quantization quantizer = Quantization("conf.yaml") quantizer.calib_dataloader = 你的校准数据集加载器 quantizer.eval_dataloader = 你的评估数据集加载器 q_model = quantizer.fit(待量化模型)
- 如果你一定要在yaml中配置数据集,可将
ImageRecord替换为LPOT支持的tensorflow_datasets类型,指定dataset name为fashion_mnist即可,无需配置本地路径。
方案2:将现有数据集转为TFRecord格式
如果你需要保留ImageRecord配置,可先将ubyte格式的fashion-mnist转换为TFRecord格式分片存储到目标路径,转换后的文件命名会自动匹配*-*-of-*的规则,即可解决路径匹配问题。同时需要把BilinearImagenet替换为适配28*28灰度图的预处理逻辑。
内容的提问来源于stack exchange,提问作者Sreejith S
相关产品推荐
相关产品推荐

