第一次用pytorch
环境安装:
-OS:Windows7
-Python 3.6.1
-Anaconda:4.4.0
在windows环境下安装pytorch详见:https://zhuanlan.zhihu.com/p/26871672
安装完以后写了最简单的代码测试能不能导入pytorch包:
报错from torch._C import * ImportError: numpy.core.multiarray failed to import #2731
解决办法如下:https://github.com/pytorch/pytorch/issues/2731
在cmd环境下写一句话 pip install numpy -I
C:\Uses\Yourname>pip install numpy -I
如果不知道怎么用cmd环境下pip安装包的同学可以看
http://www.cnblogs.com/yuanzm/p/4089856.html
安装好以后检查环境:
import numpy import torch if __name__ == '__main__': #CUDA Test x = torch.Tensor([1.0]) xx=x.cuda() print(xx)
AssertionError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from证明我的CUDA是不能用的因为我没有NVIDIA驱动
检查CUDNN Test能不能用:
# CUDNN TEST from torch.backends import cudnn print(cudnn.is_acceptable(xx))
在我这检查不了,毕竟cuda都用不了
pytorch 介绍:
np.ndarray<-> torch. Tensor
支持numpy中200多种操作
very fast acceleration on NVIDIA GPUs
如果你有一个CPU上的tensor,
你写 torch.cuda,它就会变成GPU的tensor
Varible是tensor的封装
import torch from torch.autograd import Variable tensor = torch.FloatTensor([[1,2],[3,4]]) variable=Variable(tensor,requires_grad=True) print (tensor) print(variable)
结果:
注意矩阵的点乘和矩阵的平方是不一样的:Running C:/Study/pytest/pytest.py 1 2 3 4 [torch.FloatTensor of size 2x2] Variable containing: 1 2 3 4 [torch.FloatTensor of size 2x2]
矩阵点乘:
# matrix multiplication 矩阵点乘
data = [[1,2], [3,4]]
tensor = torch.FloatTensor(data) # 转换成32位浮点 tensor
# correct method
print(
'\nmatrix multiplication (matmul)',
'\nnumpy: ', np.matmul(data, data), # [[7, 10], [15, 22]]
'\ntorch: ', torch.mm(tensor, tensor) # [[7, 10], [15, 22]]
)
矩阵乘方:
t_out = torch.mean(tensor*tensor) # x^2 v_out = torch.mean(variable*variable) # x^2 print(t_out) print(v_out) # 7.5
结果是:乘方的意思就是[torch.FloatTensor of size 2x2] 7.5 Variable containing: 7.5000
tensor*tensor Out[1]: 1 4 9 16
但是时刻记住, Variable 计算时, 它在背景幕布后面一步步默默地搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图是用来干嘛的? 原来是将所有的计算步骤 (节点) 都连接起来, 最后进行误差反向传递的时候, 一次性将所有 variable 里面的修改幅度 (梯度) 都计算出来, 而 tensor 就没有这个能力啦.
直接print(variable)
只会输出 Variable 形式的数据, 在很多时候是用不了的(比如想要用 plt 画图), 所以我们要转换一下, 将它变成 tensor 形式.
(来自莫烦的教程)
print(variable) # Variable 形式
"""
Variable containing:
1 2
3 4
[torch.FloatTensor of size 2x2]
"""
print(variable.data) # tensor 形式
"""
1 2
3 4
[torch.FloatTensor of size 2x2]
"""
print(variable.data.numpy()) # numpy 形式
"""
[[ 1. 2.]
[ 3. 4.]]
"""