TypeError: descriptor ‘subclasses’ of ‘type’ object needs an argument
1、在用pip3 install motmetrics之后,出现了一系列问题(还把旁边同事的电脑做了一下实验,结果也搞崩了)。原先所有的环境都是ok的。
2、首先就是基操,导入tensorflow出现问题:
import tensorlfow as tf
TypeError: descriptor '__subclasses__' of 'type' object needs an argument
3、网上找通了一大遍,说是各种版本问题啥的,于是,降低tensorflow版本到1.10(内心是拒绝的),numpy的版本降到1.10.0然后,tensorflow的项目都恢复正常,开心。
4、但是,笔记偶尔也玩Pytorch,于是,测试Pytorch项目,崩溃了,项目无法正常使用,发现numpy的版本问题,于是升级numpy的版本到1.14.5,此时Pytorch能正常使用。回过头来再使用Tensorflow,又崩了,心累。也就是说,此时此刻要用Tensorflow就是降低numpy版本,再用Pytorch时,升级numpy版本。
5、对于这种模式,笔者内心是无法接受的,于是,再开始查找bug模式,看到有说是因为pandas版本太高了的原因,于是降低pandas版本(一定要多次卸载pandas,直到提示未安装)
>>> import pandas
>>> pandas.__version__
'0.23.4'
6、然后升级numpy到平常用的1.14.5版本,tensorflow-gpu升级到1.12.0版本,对于numpy来说,1.14.5 正是Pytorch需要的对应版本,再运行tensorflow时出现新的问题Cudnn版本匹配问题,结果发现,可能中途装tensorflow太多次,然后现在cuda9.0对应的cudnn有新的对应版本
7、然后重新配置cudnn
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
8、检查cudnn版本,在终端输入
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
9、如果出现下图所示版本信息,说明安装成功。
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#include "driver_types.h"
于是,所有一切都正常。
>>> import numpy as np
>>> np.__version__
'1.14.5'
>>> import tensorflow as tf
>>> tf.__version__
'1.12.0'
>>> import torch
10、整体流程就是:
1)卸载pandas(切记,多次卸载),然后再安装
pip3 uninstall pandas
pip3 install -i https://pypi.tuna.singhua.edu.cn/simple pandas==0.23.4
2)卸载numpy(切记,多次卸载),然后再安装
pip3 uninstall numpy
pip3 install -i https://pypi.tuna.singhua.edu.cn/simple numpy==1.14.5
3)最后装tensorflow
pip3 install -i https://pypi.tuna.singhua.edu.cn/simple tensorflow==1.12.0