Pytorch-Spyder的Lua语言的基本操作运算

-- coding: utf-8 --

“”"
Spyder编辑器

这是一个临时脚本文件.
from future import print_function
import torch as t
x= t.Tensor(5,3)
print(x)
x= t.rand(5,3)#使用【0,1】均匀分布初始化二维数据
print(x)
print(x.size()) #查看X的形状
print(x.size()[1],x.size(1))

#add
y=t.rand(5,3)
x+y
t.add(x,y)
result = t.rand(5,3)
t.add(x,y,out=result)
print(x+y,t.add(x,y),result )
x.add_(y) #函数名后面带下划线的函数会修改Tensor本身如x.t_()会修改x,
print(result,x)
#check Tensor
print(x[:,1])
#Tensor && numpy data interact cope with
a= t.ones(5)
print(a)
b=a.numpy()#Tensor->Numpy
print(b)
import numpy as np
a=np.ones(5)
b=t.from_numpy(a)#Numpy->Tensor
print(a)
print(b)#Tensor和numpy对象共享内存,其中一个变,另外随之改变
b.add_(1)
print(a,b)
#Tensor可通过.cuda方法转为GPU的Tensor,从而享受GPU带来的加速运算
if t.cuda.is_available():
a=a.cuda()
b=b.cuda()
print(a+b)
#Autograd模块:自动微分

深度学习算法的本质就是通过反向传播求导数

#Autograd.Variable是Autograd中的核心类,他简单封装了Tensor,并支持所有的Tensor操作,
#Tensor在被封装成Variable后,可以调用他的.backward实现反向传播,免除手动求导
from torch.autograd import Variable
x=Variable(t.ones(2,2), requires_grad = True)
print(x)
y=x.sum()
print(y)
print(y.grad_fn)

#grad在反向传播过程中是累加的,这就意味着每次运行反向传播,梯度都会累加之前的梯度,所以反向传播之前需把梯度抹零
print(y.backward())
print(x.grad)

print(y.backward())
print(x.grad)
#清零操作 inplace操作,先将自身的梯度清零
x.grad.data.zero_();

print(x.grad)

print(y.backward())
print(x.grad)

猜你喜欢

转载自blog.csdn.net/zjguilai/article/details/88973548