【code】kaggle项目AD疾病分类本地复现代码问题汇总

代码来源

kaggle项目:Alzheimer’s Disease Classification代码的本地复现
使用的重要的包的基础版本:
python:3.7.9
tensorflow:2.4.0
tensorflow-addons:0.12.1
imblearn:0.7.0


问题1

tensorflow-addons安装问题

无法正常调用tensorflow-addons包,import时就产生错误。

报错:

NotFoundError: tensorflow.python.framework.errors_impl.NotFoundError: D:\……\Lib\site-packages\tensorflow_addons\custom_ops\custom_ops\_activation_ops.so not foundfound

原因分析:

参考https://blog.csdn.net/chenhepg/article/details/127074970,详查tensorflow和addons版本对应,发现addons版本过高,将原有的addons卸载或者整个删掉,按正确版本重装。


解决方案:

注:https://blog.csdn.net/ACanswer/article/details/103635381的解决方案为将.so结尾的文件移出文件夹,我测试后仍然报错,可以先尝试移动是否有效。

安装命令(换了清华源,不用源可能会提示连接超时):

pip install tensorflow_addons==0.12.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

问题2

2. imblearn0.7.0调用问题

使用SMOTE算法时,产生调用问题,提示我应该只传入一个参数。刚开始认为可能跟项目代码有关,修改项目代码后仍然报错。
报错:

Traceback (most recent call last):
  File "D:\……\main.py", line 108, in <module>
    train_data, train_labels = sm.fit_resample(data, labels)
  File "D:\……\Anaconda\lib\site-packages\imblearn\base.py", line 86, in fit_resample
    if binarize_y else output[1])
TypeError: label_binarize() takes 1 positional argument but 2 were given

原因分析:

不知道是什么原因
改完包的源码,传参的时候将第二个参数前加入‘classes=’就正常了,对于0.7.0版本介绍也少,查到原因再来补充。

推测1:自己安装的sklearn1.0.2版本比较新,修改了标签二值化函数传参的要求,imblearn0.7.0没更新这里。


解决方案:

1. 修改imblearn包的源码(原理不懂,但代码能跑,谨慎修改)
点击报错部分的链接,跳转到D:\……\Anaconda\lib\site-packages\imblearn\base.py,也就是base文件的第85和86行:
将原来的代码:

        y_ = (label_binarize(output[1], np.unique(y))
              if binarize_y else output[1])

修改为如下:

        y_ = (label_binarize(output[1], classes=np.unique(y))
              if binarize_y else output[1])

2. 有其他解决方案是推荐安装更稳定的imblearn0.6.2和对应匹配的sklearn

imblearn有好多安装命令,每个命令的包内容还有差别,不是很明白,我安装的时候用的是这一个,没有version时默认装最新版本:

pip install imbalanced-learn==version -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值