今天看是学习pytorch,视频教程是莫烦的pytorch教程,安装花了一天时间,主要是pytorch用conda下载不下来,建议离线下载,然后要找离线的方式安装,这个靠谱。
首先就是tensor,variable的概念,tensor与variable貌似在最新的版本中,已经合二为一了,而视频上还是按老版本来讲的。实验代码如下
import torch
from torch.autograd import Variable
#听说新版本variable与tensor两个类型合并了。
#variable与tensor的区别在于:
#Tensor对象支持在原对象支持区域上修改数据,通+=”或者torch.add()方法
#而Variable不支持在原对象内存区域上修改数据
#Variable对象可求梯度,并且对Variable对象的操作,操作会被记录
#可以通过grad_fn属性查看上一次的操作,可通过data属性访问原始张量
#
tensor = torch.FloatTensor([[1,2],[3,4]])
variable = Variable(tensor, requires_grad=True);
t_out = torch.mean( tensor*tensor )
v_out = torch.mean( variable * variable )
print(t_out)
print(v_out)
#v_out = 1/4*sum(var*var).梯度如何就是那呢?
#d( v_out ) /d(var) = 1/4*2*variable = variable /2;
v_out.backward()
#
print(variable.grad) #
print(variable.data) #这是tensor类型
print(variable.data.numpy()) #把variable里面的tensor转换成numpy
print(variable) #variable
可能以后,variable的概念就要淡化了,不再需要由tensor来生成variable了,但为了学习,代码风格与视频中保持一致。
这断代码,包括一些用torch的tesnor,variable进行计算的方法,
我个人比较感兴趣的是
v_out.backward()
反向传播,应该就类似于神经网络的反向传播,拟合参数的概念类似。看看后面四个打印的信息
tensor(7.5000)
tensor(7.5000, grad_fn=<MeanBackward0>)
tensor([[0.5000, 1.0000],
[1.5000, 2.0000]])
tensor([[1., 2.],
[3., 4.]])
[[1. 2.]
[3. 4.]]
tensor([[1., 2.],
[3., 4.]], requires_grad=True)
可以看到v_out.backward()了以后,改变了variable.grad的值,或者说修改了variable类的一些成员。
加入把varible的四个值看成是x,vout对应一个y。那么
y =f(x),其中
f(x) =1 / 4 * sum( x^2 )
有点不大懂了。。。
总而言之,由于这个视频可能需要一定的pytorch基础,直接上手看,太多不懂的概念,我决定先看其他有讲pytorch基础的视频,入入门。