win10-python3.7-CUDA10.0

一、配置环境
win10 python3.7 CUDA10.0 cudnn-10.0-windows10-x64-v7.6.4.38
1、下载Annoconda,基本的工具包都具备了,python3.7
2、需要在NVIDA中的控制面板中–>左下脚系统信息–>组件–>找到适合CUDA的最高版本;
本机的CUDA10.0
通过nvcc -V 用来查看是否安装成功;

3.下载对应的cudnn-10.0-windows10-x64-v7.6.4.38.zip
这个需要到NVIDA的官网–注册一个账号才行,然后编辑一下简单信息,下载对应的版本
4、找到对应的pytorch版本-- 1.6.0+cu101 torchvision=0.7.0+cu101
pip install torch1.6.0+cu101 torchvision0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.douban.com/simple --trusted-host pypi.douban.com(*可能下的快一点)
5、tensorflow-gpu 的下载 2.0.0 版本才行
win10-python3.7-CUDA10.0
6、分别测试两种环境下显卡是否能用
win10-python3.7-CUDA10.0
7、查看一下显卡的信息
win10-python3.7-CUDA10.0
8、nvidia-smi用来查看GPU的信息,每次跑代码的时候可以进行观察

二、一些基本的问题集合:
1、注意tensorflow和pytorch 会冲突,如果同时进行;那么就会报显存不足的问题
CUDA error:out of memory错误
2、Pytorch中的随机种子的设定
win10-python3.7-CUDA10.0
3、 os.environ[‘TF_CPP_MIN_LOG_LEVEL’] = ‘0’ 是设置log输出信息的,也就是程序运行时系统打印的信息。
win10-python3.7-CUDA10.0
4、将模型从CPU转到GPU上时:

  1. device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)
  2. 将net网络以及输入输出标签转移到GPU上:
    cnn = CNN()
    cnn.to(device)
    test_x = test_x.to(device)
    b_x,b_y = b_x.to(device),b_y.to(device)
    注意哪些函数有返回值,函数对原操作数据没有进行更改,对返回值进行了更改;
    一定要注意是 b_x = b_x.to(device) 而不能仅仅b_x.to(device) 这样b_x不能移动到GPU上;

test_y 可以不用输送到device,由于他没有输送到cnn中进行计算;
3)对于每次迭代预测输出,转换为numpy进行计算时,
从GPU上的tensor,先要转换为CPU上的tensor,然后再转换为numpy格式;
///////这里如果能够直接通过tensor计算就可以不用浪费转换的时间了;
4)对于标量,也就是只有一个元素的tensor,可以通过.item()来获得这个value;
5)pytorch0.3之后,tensor.dot()方法进行了更新,只能对1维的tensor进行点成运算
6)错误:element 0 of tensors does not require grad and does not have a grad_fn
这个问题是代表没有反向梯度运算的变量;

7)os.environ[“CUDA_VISIBLE_DEVICES”]=“0”
这里设置几号CUDA可见; 在多GPU下使用,防止多人冲突
8)torch.device(“cuda”) 或者torch.device(“cuda:0”)
这个是用来返回cuda,千万注意,这里的关键字要么就选择cuda,要么选择cuda:0 注意只要有可用的GPU加速,那么cuda的顺序就是从0开始的; 注意只有一张GPU 就不要选择其他的编号 要不然后面不能转移到设备;这句话是不会报错,不管选择cuda:n
9)对于是否可以进行梯度下降的更改;
win10-python3.7-CUDA10.0
10)///很重要////
np. 操作, torch. 操作
可以就想着把pytorch当成numpy使用,有很多内置的方法都是很类似的:
只是产生的数据类型前者是tensor类型,可以用于GPU加速;
后者产生的数据是numpy类型的,不可以用于GPU加速;

11)范数:
1维范数,2维范数;
win10-python3.7-CUDA10.0
12)多维输出的反向求导,需要给定一个向量:
这个向量的作用就是加权值;
13)_, predicted = torch.max(outputs.data, 1)
这个函数返回的是最大的值和索引
参数: 数组 第二个参数 0代表列,1代表行;