pytorch笔记 1.6
torch的理解
在torch中编写代码不是在做计算,而是在构建计算图。把它看成在构建计算图。
tensor基本数据类型成员
tensor是用来存数据的,可以存标量、向量、矩阵、高维度的tensor
该类型包含两个数据成员data(w)和grad(损失函数对w的导数)
torch中构建正向传播过程,会自动构建反向传播并保存反向传播的数据,所以torch在构建神经网络的模型时,就是在构建计算图。
w = torch.Tensor([1.0])
w.requires_grad = True //True表示需要计算梯度
取tensor中的元素
pytorch中,tensor.item()方法 是得到一个元素张量里面的元素值,具体的数值。如果是tensor相互计算的话会产生计算图,而.item()不会
numpy_torch 与data转化
data = [-1,-2,1,2]
tensor = torch.FloatTensor(data)
numpy_data = tensor.numpy()
tensor = torch.from_numpy(numpy_data)
torch.mm(tensor1,tensor2)
np.matmul(numpy_data1,numpy_data2)
注意:对于torch的相关属性里面必须传入tensor类型的数据
更新梯度
tensor=tensor.requires_grad_(True) 注:true开启记录梯度d(tensor)
v_out = torch.mean(tensortensor) 注:定义求导函数v_out =1/4(tensor)**2
v_out.backward() 注:求导d(v_out)/d(tensor)=1/42*tensor=1/2tensor
tensor.grad 注:计算结果,把数带入到求导中,求得梯度即斜率
梯度清零
不清零就会造成下次使用grad梯度更新时,dw1在grad中加上下次更新的值dw2,就不是想要的grad结果。会造成grad计算反向传播会加速。不清零造成梯度累加
w.grad.data.zero_()
Variable
现在版本的Variable(用来放torch.tensor)就是等同于troch.tensor的作用,可以不使用Variable了
linspace与tensor的维度改变
- torch.linspace(-5,5,200)
表示(-5,5)等分取点200个,就是一个(200,1)的向量 - .view((200,1))相当于np.reshape((200,1))
x = np.linspace(0, 10, 200)
x_t = torch.Tensor(x).view((200,1))
激活函数
import torch.nn.functional as F
F.relu(x)
F.softplus(x)(接近于relu的平滑曲线)
torch.sigmoid(x)
torch.tanh(x)
loss function &&Cost function
Training Loss(ERROR)样本
loss = (y~-y)**2 = (w*x - y)**2
Mean Square Error 编程MSE training set
cost = 1/N Σ(y~n-yn)**2