AttributeError:无法在__main__模块获取ImageRecord属性求助
问题排查:AttributeError: Can't get attribute 'ImageRecord' on <module 'main' from 'train.py'>
运行代码与报错位置
错误出现在代码第二行,完整代码片段:
for _ in tqdm(list(range(num_train_iterations))): batch = sess.run(train_dataloader.get_batch) _, train_loss_val, color_constancy_loss_val, contrastive_loss_val = \ sess.run([train_op, train_loss, color_constancy_loss, contrastive_loss], feed_dict={ x["images"]: batch[0], x["illums"]: batch[1], x["cc24s"]: batch[2]
核心报错信息
AttributeError: Can't get attribute 'ImageRecord' on <module '__main__' from 'train.py'>
完整回溯信息
Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1365, in _do_call return fn(*args) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1349, in _run_fn return self._call_tf_sessionrun(options, feed_dict, fetch_list, File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1441, in _call_tf_sessionrun return tf_session.TF_SessionRun_wrapper(self._session, options, feed_dict, tensorflow.python.framework.errors_impl.UnknownError: AttributeError: Can't get attribute 'ImageRecord' on <module '__main__' from 'train.py'> Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\script_ops.py", line 244, in __call__ ret = func(*args) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 302, in wrapper return func(*args, **kwargs) File "C:\Users\AppData\Local\Temp\tmpg9kpovk5.py", line 17, in _func data = ag__.converted_call(ag__.ld(pickle).load, (ag__.ld(f),), None, fscope_1) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 461, in converted_call return _call_unconverted(f, args, kwargs, options, False) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 340, in _call_unconverted return f(*args) AttributeError: Can't get attribute 'ImageRecord' on <module '__main__' from 'train.py'> [[{{node PyFuncStateless}}]] [[IteratorGetNext]] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "train.py", line 179, in <module> main(sess) File "train.py", line 138, in main batch = sess.run(train_dataloader.get_batch) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 957, in run result = self._run(None, fetches, feed_dict, options_ptr, File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1180, in _run results = self._do_run(handle, final_targets, final_fetches, File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1358, in _do_run return self._do_call(_run_fn, feeds, fetches, targets, options, File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1384, in _do_call raise type(e)(node_def, op, message) tensorflow.python.framework.errors_impl.UnknownError: AttributeError: Can't get attribute 'ImageRecord' on <module '__main__' from 'train.py'> Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\script_ops.py", line 244, in __call__ ret = func(*args) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 302, in wrapper return func(*args, **kwargs) File "C:\Users\AppData\Local\Temp\tmpg9kpovk5.py", line 17, in _func data = ag__.converted_call(ag__.ld(pickle).load, (ag__.ld(f),), None, fscope_1) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 461, in converted_call return _call_unconverted(f, args, kwargs, options, False) File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 340, in _call_unconverted return f(*args) AttributeError: Can't get attribute 'ImageRecord' on <module '__main__' from 'train.py'> [[{{node PyFuncStateless}}]] [[IteratorGetNext]]
排查提示
- 检查
ImageRecord类的导入:找到仓库中定义ImageRecord的文件(通常在data目录下),确保train.py开头正确导入该类,且导入语句在数据加载相关代码之前执行。 - 修复pickle的命名空间问题:如果生成训练用pickle文件时,
ImageRecord类是在__main__模块中定义的,需要在train.py中添加以下代码,让pickle能识别该类:from 定义ImageRecord的模块名 import ImageRecord import __main__ __main__.ImageRecord = ImageRecord - 验证TensorFlow版本:该仓库基于TensorFlow 1.x开发,若当前使用TF 2.x,大概率存在兼容性问题,建议切换到TensorFlow 1.15.x版本测试。
- 检查数据加载逻辑:查看
train_dataloader.get_batch方法,确认其中的pickle加载逻辑是否正确关联了ImageRecord类的定义。 - 查看仓库内置解决方案:检查项目的issue列表,其他用户可能遇到过相同问题并给出了解决方案。
内容的提问来源于stack exchange,提问作者Curiosity
相关产品推荐
相关产品推荐

