训练StyleGAN2时出现numpy无法分配0字节的MemoryError报错
这个报错不是numpy的bug,属于数据集配置或预处理错误导致的异常。
错误根因分析
报错日志最终指向的异常数组形状为(1073741824, 0):
- 数值
1073741824等于2^30,属于整数溢出或标签读取逻辑出错后生成的非法值 - 第二维为0,说明代码读取到的数据集标签维度为空
StyleGAN2初始化时尝试为这个形状异常的数组分配显存/内存,虽然第二维为0时理论上占用空间为0,但超大的第一维数值触发了numpy的内存校验规则,才会抛出“无法分配0字节”的反常报错。
解决方案
- 如果你的训练任务不需要使用类别标签做条件生成,启动训练命令时添加
--cond=0参数,关闭条件生成模式即可规避代码读取不存在的标签的逻辑 - 如果你需要使用条件生成功能,检查你制作tfrecords数据集时的标签处理逻辑,确认标签的维度没有被错误置为0,也没有出现数值溢出问题
- 可以临时修改
dataset.py代码,在标签读取完成后增加打印语句输出self._np_labels的形状和取值,快速定位标签读取环节的具体问题
内容的提问来源于stack exchange,提问作者Denking
相关产品推荐
相关产品推荐

