当前位置: 代码网 > it编程>编程语言>Javascript > 【2024年04月24日基于Galaxy10CNN的星系形态分类项目实战,TensorFlow环境配置踩坑及记录】

【2024年04月24日基于Galaxy10CNN的星系形态分类项目实战,TensorFlow环境配置踩坑及记录】

2024年08月04日 Javascript 我要评论
2024年4月,基于astroNN包的Galaxy10CNN实现星系图像分类,天文领域

基于galaxy10cnn的星系形态分类项目实战,tensorflow环境配置踩坑及记录

项目地址

链接: 项目地址

实现

打开链接,将这一个文件跑通即可。
踩坑点:深度学习项目环境配置
下面笔者简述环境配置过程及踩坑点:

坑1:tensorflow==2.16.1

默认安装的最新版本,其自带版本匹配的tf_keras,但代码中单独使用keras包,不会报错,但是在内部调用中会自动调用tensorflow自带的tf_keras包。

此时会出现第一个问题:报错如下:
traceback (most recent call last): file "c:\users\99773\desktop\ai_dmx\g10_classification_3.9.py", line 41, in <module> galaxy10net = galaxy10cnn() file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models_init_.py", line 64, in galaxy10cnn galaxy10_net = cifar10cnn() file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\misc_models.py", line 54, in init super().init() file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\base_cnn.py", line 168, in init super().init() file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\base_master_nn.py", line 68, in init self._keras_ver = tfk.version # tensorflow.keras version file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\tensorflow\python\util\lazy_loader.py", line 211, in getattr return getattr(module, item) attributeerror: module 'keras._tf_keras.keras' has no attribute 'version'
具体问题描述为:找不到tf_keras的包,但是笔者通过路径找到该包时,发现version是存在的。

分析如下:

  1. traceback (most recent call last)::这是python程序出现异常时的标准输出格式,表示接下来会显示引发当前错误的函数调用序列(即“调用栈”),从最近的调用开始追溯。

  2. file "c:\users\99773\desktop\ai_dmx\g10_classification_3.9.py", line 41, in <module>:指出错误发生在哪个文件中(g10_classification_3.9.py),具体是第41行,并且该行位于文件的顶级模块(<module>)。

  3. galaxy10net = galaxy10cnn():这是出错的代码行,尝试创建一个名为galaxy10cnn的类的实例,并将其赋值给变量galaxy10net

  4. file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\__init__.py", line 64, in galaxy10cnn:错误追溯到astronn.models包中的__init__.py文件,第64行的galaxy10cnn类定义内。

  5. galaxy10_net = cifar10cnn():在galaxy10cnn类的定义中,调用了cifar10cnn类的构造函数来创建实例。

  6. file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\misc_models.py", line 54, in __init__:进一步追溯到astronn.models.misc_models.py文件中的cifar10cnn类的__init__方法(第54行)。

  7. super().__init__():该行代码调用了父类的初始化方法。

  8. file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\base_cnn.py", line 168, in __init__:继续追溯到父类定义所在的文件base_cnn.py,以及其__init__方法的第168行。

  9. super().__init__():此处同样调用了更上层父类的初始化方法。

  10. file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\astronn\models\base_master_nn.py", line 68, in __init__:最终追溯到最顶层父类定义所在的文件base_master_nn.py及其__init__方法的第68行。

  11. self._keras_ver = tfk.__version__ # tensorflow.keras version:在该行代码中,试图获取tensorflow.keras模块的版本号,并将其赋值给实例变量self._keras_ver

  12. file "c:\app_work\anaconda3\envs\ai_dmx\lib\site-packages\tensorflow\python\util\lazy_loader.py", line 211, in __getattr__:由于tensorflow.keras是通过延迟加载(lazy loading)的方式引入的,因此实际访问属性时会触发lazy_loader.py文件中__getattr__方法。

  13. return getattr(module, item):在__getattr__方法中,尝试从实际加载的模块(module)中获取指定属性(item)。

  14. attributeerror: module 'keras._tf_keras.keras' has no attribute '__version__':最终抛出异常,表示在模块keras._tf_keras.keras中找不到名为__version__的属性(即版本号)。这可能是由于该模块的实现不包含版本信息,或者模块结构发生了变化导致无法按预期方式访问版本号。

解决方法:

直接查询tensorflow版本

如果keras._tf_keras.keras确实不提供__version__属性,您可以考虑直接查询tensorflow的版本,因为tensorflow.kerastensorflow的一部分。修改base_master_nn.py文件中第68行代码为:

self._keras_ver = tf.__version__  # 使用tensorflow的版本代替

这样虽然不能得到tensorflow.keras模块本身的精确版本,但通常情况下,tensorflow的版本足以反映其内部keras组件的大致版本信息。

第一个问题解决之后,继续运行,报出第二个问题:报错如下:
在这里插入图片描述
出现了内部调用的函数位置参数不匹配问题。这肯定是astronn包与tensorflow版不一致导致的,而且无法轻易修改,会导致后续一系列问题。
解决办法:
astronn 包保持版本不变,tensorflow==2.12.1,但是该版本没有对应的tf_keras包,单独安装keras==2.12.0

坑2:tensorflow==2.12.1

解决过程:
会有两个报错,也是版本不完全匹配导致的,但是该版本不匹配可以通过将报错的代码注释掉即可顺利跑通。
第一个报错:
在这里插入图片描述

sample_weight_mode = sample_weight_mode注释掉这句即可

第二个报错:
说是tensorflow版本小于2.13,请升级版本!
注意,此时千万不要升级版本,把报错的地方,即需要使用2.13版本tensorflow的代码注释掉即可,只要不影响功能的实现即可。
具体位置:
在这里插入图片描述
该文件中注释掉的部分即为使用2.13版本的tensorflow,注释掉即可(可能2.13版本的可以跳过这个错误直接实现,但笔者没有尝试):
在这里插入图片描述
到此为此,程序即可跑通,进入训练即可,可自行修改训练参数。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com