【深度学习】pytorch-tensorflow-anaconda笔记

1.安装CornerNet、Anaconda和pytorch遇到的问题

2.安装tensorflow-gpu版本

3.pytorch版本安装

4.tensorflow和pytorch指定多GPU进行运算

5.pytorch和tensorflow中的tensor与numpy转换

6.pytorch数据的并行计算(DataParallelism)

7.Pytorch查看可训练参数

8.Pytorch冻结梯度,只训练某几层网络权重

9.安装anaconda后取消命令行前出现的base

1. 安装CornerNet、Anaconda和pytorch遇到的问题

Anaconda在2019年5月已经禁止使用国内镜像了,因此下面方法已经用不了了,权当做留念,以后只能使用官方提供的来安装,速度慢点就慢点吧。

用conda安装Pytorch过程中会连接失败,这是因为Anaconda.org的服务器在国外。可以用清华TUNA镜像源,包含Anaconda仓库的镜像,将其加入conda的配置,配置如下:

  1. 添加清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
切换回默认镜像源,命令一行搞定:
conda config --remove-key channels

如果想单个删除的话,删除单个链接命令如下:

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  1. 然后CornerNet官网会有如下一条命令来创建CornerNet_Lite环境并安装conda_packagelist.txt文档中的各种包:
conda create --name CornerNet_Lite --file conda_packagelist.txt --channel pytorch

但是会出现中断,提示安装失败,因此这里我们应该去掉后面指定channel路径的–channel pytorch,即改为:

conda create --name CornerNet_Lite --file conda_packagelist.txt

3.对于安装的pytorch版本问题,在conda_packagelist.txt需要把pytorch的版本以及cuda的版本根据电脑驱动版本来改过来。由于电脑cuda版本是9.0,而他的文件中却是10.0,因此需要做出以下更改:
(1) cuda100=1.0=0 改为 cuda90=1.0.0
(2) pytorch=1.0.0=py3.7_cuda10.0.130_cudnn7.4.1_1 改为pytorch=1.0.0=py3.7_cuda9.0.176_cudnn7.4.1_1
4. 如果怎么安装都出错,就卸载Anaconda后重新装Anaconda,再试一遍,应该能解决问题。卸载Anaconda参考https://blog.csdn.net/yeler082/article/details/79116490

5.遇到ValueError:numpy.ufunc size changed,may…的问题,解决方法是把numpy升级到1.16.1版本,pip install numpy==1.16.1。不过我上次遇到这种问题是由于没装好pytorch或者Anaconda。最后装好了之后就不会出现这种情况。

6.python图像处理问题
AttributeError: ‘NoneType’ object has no attribute ‘shape’
原因:

(1) 图片不存在(路径不存在, 路径包含中文无法识别)
(2) 读取的图片内容和默认读取时参数匹配不匹配。(默认读取的是3通道的彩色图)例如读取到的图片是灰度图,就会返回None。
(3)路径中有中文。

7.命令
(1) 安装完anaconda后终端默认会出来一个(base),可使用conda deactivate命令去掉,不过有没有不影响。
(2) 创建zhz环境

conda create --name zhz

也可以使用例如

conda create --name CornerNet_Lite --file conda_packagelist.txt --channel pytorch

的命令通过pytorch官网安装conda_packagelist.txt文件下的所有安装包。conda_packagelist.txt由我们自己随意决定想安装哪些包,我们可以通过指定–chanel来从清华镜像源安装更快,参考5.1, 5.2。

(3) 进入zhz环境

source activate zhz

(4) 退出zhz环境

source activate

2. 安装tensorflow-gpu版本

使用anaconda安装tensorflow的环境:python3.5.6+tensorflow-gpu==1.12.0+cuda9.0.176+cudnn7.1.4安装成功
由于tensorflow目前不支持Python3.7,因此在系统中再安装一个Python版本,以python3.5.6为例:
1.安装好Python3.5.6: 参考:https://www.cnblogs.com/ningvsban/p/4384995.html
2.在anaconda下创建名为“tensorflow”并且Python环境为3.5版本的环境:

conda create --name tensorflow python=3.5   #

3.安装tensorflow
系统默认安装tensorflow版本:

pip install tensorflow-gpu

安装指定版本的tensorflow:

pip install tensorflow-gpu==1.12.0 

如果你下载了某个版本的tensorflow-gpu到本地,可以这么安装:

pip install tensorflow_gpu-0.12.0-cp35-cp35m-manylinux1_x86_64.whl 

测试tensorflow是否安装成功:
进入Python

import tensorflow as tf
tf.__version__

3.pytorch安装

建议0.4.0版本最合适,不要安装最新版。
我电脑和服务器版本都是cuda=9.0.176 + cudnn=7.1.4 + 1050Ti(我)+1080Ti(服务器)
版本推荐:pytorch-0.4.0 + torchvision-0.1.8 + python=3.5.4
在http://download.pytorch.org/whl/cu90/torch-0.4.0-cp35-cp35m-linux_x86_64.whl 可下载pytorch-0.4.0版本,python=3.5.4.

如果想安装别的版本,例如1.0.1版本,只需要把上面网址中的0.4.0改为1.0.1即可。
还要安装numpy之后才能import torch成功,否则只会安装torch成功,导入会失败

也可在清华源镜像中下载各pytorch安装包,不过下载下来的是压缩包(我还没有查阅怎么使用这种安装),不是whl格式的文件,: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/

另 torchvision安装0.1.8合适。因为更高的版本有些东西被弃用了,很多程序都运行不了,改起来很麻烦。
安装方法:下载pytorch-0.4.0版本的whl文件

pip install torch-0.4.0-cp35-cp35m-linux_x86_64.whl
pip install torchvision==0.1.8

不能直接安装pip install torchvision不指定版本,否则会自动安装最高版本的torchvision,然后就自动把pytorch版本也升级了。

4.tensorflow和pytorch指定多GPU进行运算

tensorflow和pytorch指定多GPU的话,对应的语句首先改成:
CUDA_VISIBLE_DEVICES=0,1 python my_script.py
CUDA_VISIBLE_DEVICES=2,3 python my_script.py
CUDA_VISIBLE_DEVICES=0,1,2,3 python my_script.py
或者:
os.environ[“CUDA_VISIBLE_DEVICES”] = “0,1,2,3” #一定要加引号
在tensorflow中可以使用

with tf.device('/gpu:0'):

这样的方式来指定GPU进行某部分运算。

5.pytorch和tensorflow中的tensor与numpy转换

5.1 pytorch的tensor与numpy数组转换

pytorch的tensor对象与numpy数组是可以相互转换的,且numpy数组的默认类型是double.

(1)tensor转numpy:
# a是   <class ‘torch.Tensor’>
# b和c是   <class ‘numpy.ndarray’>
a = torch.ones(2,2)
b = a.numpy()    # 方法1
c=np.array(a)    # 方法2,也可以转numpy数组
(2)numpy转tensor:
# a是   <class ‘numpy.ndarray’>
# b和c是 <class ‘torch.Tensor’>
a = np.ones(5)
b = torch.from_numpy(a)     # 方法1
c=torch.Tensor(a)           # 方法2,也可以转pytorch Tensor
5.2 TensorFlow中 tensor与numpy数组转换
(1) ndarray 转化为 tensor

TensorFlow 通过 convert_to_tensor 这个函数进行转换,代码如下:

# 创建ndarray
array = np.array([1, 2, 3, 4], np.float32)
# 将ndarray转化为tensor
t = tf.convert_to_tensor(array, tf.float32, name='t')
print(t)

Tensor("t:0", shape=(4,), dtype=float32)
(2) tensor转化为ndarray
方法1:直接转化
# 创建张量
t = tf.constant([1, 2, 3, 4], tf.float32)
session = tf.Session()

array = session.run(t) # 张量转化为ndarray

print(type(array))
print(array)

<class 'numpy.ndarray'>
[ 1.  2.  3.  4.]
方法2: 利用Tensor的成员函数eval
t = tf.constant([1, 2, 3, 4], tf.float32)
session = tf.Session()

array = t.eval(session=session) # 张量转化为ndarray
print(type(array))
print(array)

<class 'numpy.ndarray'>
[ 1.  2.  3.  4.]
上面这种方法也可以这么写
t = tf.constant([1, 2, 3, 4], tf.float32)
# 张量转化为ndarray
with tf.Session() as session:
    array = t.eval()

    print(type(array))
    print(array)

<class 'numpy.ndarray'>
[ 1.  2.  3.  4.]

6.pytorch数据的并行计算(DataParallelism)

摘自:https://blog.csdn.net/Alawaka2018/article/details/80993197

.to(device)

\left( \frac{ \frac{x_b - x_a}{w_a} - \mu_x }{\sigma_x}, \frac{ \frac{y_b - y_a}{h_a} - \mu_y }{\sigma_y}, \frac{ \log \frac{w_b}{w_a} - \mu_w }{\sigma_w}, \frac{ \log \frac{h_b}{h_a} - \mu_h }{\sigma_h}\right)

7.Pytorch查看可训练参数,添加no bias decay实现

参考:https://blog.csdn.net/jeryjeryjery/article/details/83057199
遍历named_parameters()中的所有的参数,只打印那些param.requires_grad=True的变量,就是模型中所有的可训练参数列表
model.parameters()只有数值,model.named_parameters()既有名称,也有数值,model.parameters()就是从model.named_parameters()中提取的数值

for name, param in model.named_parameters():
if param.requires_grad:
    print(name)

下面是对params进行修改,只对权重进行衰减,不对偏置衰减:

import torch.optim as optim

### no bias decay
## 把model.named_parameters参数中的偏置和权重分别添加到各自的列表中。
## 由于model.named_parameters()中只有(卷积层和BN层的)权重和偏置,所以optim.SGD()中的model.parameters()可以用weight_p, bias_p代替。
weight_p, bias_p = [],[]
for name, p in model.named_parameters():
if 'bias' in name:
    bias_p += [p]
else:
    weight_p += [p]


for name, param in model.named_parameters():
if param.requires_grad:
    print(name)
# Optimizer
# optimizer = optim.SGD(model.parameters(), lr=hyp['lr0'], momentum=hyp['momentum'], weight_decay=hyp['weight_decay'],
#                      nesterov=True)
optimizer = optim.SGD([{'params': weight_p, 'weight_decay': hyp['weight_decay']},
                   {'params': bias_p, 'weight_decay': 0}],
                   lr=hyp['lr0'],
                   momentum=hyp['momentum'], 
                        nesterov=True)

可能在加入no bias decay的代码后,会出现下面的错误,原因是因为你需要重头开始训练,而不能在某个epoch中断训练后修改代码添加进no bias decay之后从检查点恢复训练,
你都把可训练参数修改进了weight_p, bias_p了,自然找不到之前训练的参数了。

Traceback (most recent call last):
  File "train.py", line 391, in <module>
    accumulate=opt.accumulate)
  File "train.py", line 153, in train
    optimizer.load_state_dict(chkpt['optimizer'])
  File "/usr/local/lib/python3.5/dist-packages/torch/optim/optimizer.py", line 110, in load_state_dict
    raise ValueError("loaded state dict has a different number of "
ValueError: loaded state dict has a different number of parameter groups

8.Pytorch冻结梯度,只训练某几层网络权重

具体实例及讲解参考 https://blog.csdn.net/u012436149/article/details/66971822
这里讲一下requires_grad和volatile:
(1)在训练时如果想要固定网络的底层,那么可以令这部分网络对应子图的参数requires_grad为False。这样,在反向过程中就不会计算这些参数对应的梯度。
(2)Variable的参数volatile=True和requires_grad=False的功能差不多,但是volatile的力量更大。当有一个输入的volatile=True时,那么输出的volatile=True。volatile=True推荐在模型的推理过程(测试)中使用,这时只需要令输入的voliate=True,保证用最小的内存来执行推理,不会保存任何中间状态。

9.安装anaconda后取消命令行前出现的base

安装conda后取消命令行前出现的base,取消每次启动自动激活conda的基础环境

参考: https://blog.csdn.net/u014734886/article/details/90718719

方法一:

每次在命令行通过conda deactivate退出base环境回到系统自动的环境

方法二

1,通过将auto_activate_base参数设置为false实现:

conda config --set auto_activate_base false

2,那要进入的话通过conda activate base

3,如果反悔了还是希望base一直留着的话通过conda config --set auto_activate_base true来恢复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值