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

基于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版本的可以跳过这个错误直接实现,但笔者没有尝试):
在这里插入图片描述
到此为此,程序即可跑通,进入训练即可,可自行修改训练参数。

  • 26
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
?作为全球最大的手机制造商之一,三星手机在过去的几年里一直在面临着来自苹果、华为等竞争对手的强劲压力。而在这个行业已经趋于饱和的情况下,另外一股难以预测的力量——大寒潮,又对手机行业带来了新的挑战。 在这个背景下,三星手机究竟是如何度过这个行业寒冬的呢? 1.加强产品创新 面对激烈的市场竞争,三星手机不断加强产品创新,推出了一系列高端产品,包括Galaxy S系列、Galaxy Note系列等。这些产品在外观、性能、摄像头等方面都有所提升,并具备更好的用户体验,有助于提高消费者的满意度和忠诚度。 2.拓展市场份额 为了进一步拓展市场份额,三星手机还加强了在新兴市场的布局。在印度、东南亚等地区,三星手机推出了一系列针对当地消费者需求的产品,如大屏幕、长续航等。同时,三星手机还通过与当地运营商的合作,加强了在这些市场的销售和服务能力。 3.提高品牌形象 三星手机在品牌形象上也做出了大量的努力。在营销活动中,三星手机通过大规模的广告投放、赞助体育赛事等途径,提高了品牌的曝光率和知名度。此外,三星手机还加强了在社交媒体等渠道的营销,与消费者进行互动,增强了品牌的亲和力和认可度。 总的来说,三星手机在产品创新、市场拓展、品牌形象等方面都做出了积极的努力,成功地度过了这个行业寒冬。在未来,三星手机将继续加强创新和拓展市场,为消费者带来更好的产品和服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值