datawhale打卡学习第二天

张量:
0阶数字
1阶向量
2阶矩阵
3阶时序等等
创建tensor
import torch
x=torch.rand(4,3)
print(x)
torch.zeros
torch.ones
torch.zeros
torch.linspace
torch.normal
基于已经有的东西进行创建。
x=x.new_ones(4,3,dtype=torch.double)
x=torch.randn_like(x,dtype=torch.float)
张量计算:
torch.add(x,y)
y.add_(x)
x.reshape()
x.view()都是改变形状的reshape
为了使得运算不会同步。进行x.clone()
广播机制(不全面进行,部分进行留存)
torch.arange(1,3).view(1,2)

自动求导:autograd
torch.tensor的核心。
如果又requires_grad ==true那么可以通过backward() 来将计算进行反向追踪。所有的梯度都会累加到.grad中。
为了防止跟踪,可以用.detach()或者 with torch.no_grad() 来进行防止。
autograd里面function也重要。
function和autograd会成为无环图。每个张量都有grad_fn属性。使用创建tensor的function导致的
eg:x=torch.rand(3,3,requires_grad=True)
由于手动创建所有x.grad_fn是None

如果tensor一个标量,那么backward()不用指代。
如果是一个向量,则需要一个形状匹配的张量。
x=torch.ones(2,2,requires_grad=True)
y=x**2
z=yy3
out=z.mean()

out.backward()
输出了d(out)/dx
print(x.grad)

out3=x.sum()
x.grad.data.zero_()
out3.backward()
print(x.grad)
问题一:这个x.grad.data.zero_()具体作用。变成零了,为何还有1的值???
问题二:y.backward(v)这里v怎么进行计算的?

也可以将代码包装到 with torch.no_grad(): 中,则无法被跟踪
with torch.no_grad():
print((x**2).requires_grad)
想修改tensor,但是不想被autograd记录,则可以对tensor.data进行操作。
(问提三:tensor.data 和tensor.clone的区别?)

并行计算:
通过os.environ的办法,进行分配。
import os
os.environ[“cuda_visible_device”]=“2”
cuda_visible_device=0,1 python train.py
(更多并行计算的问题,需要进行提问,再问
问题四,解决并行计算其他疑问。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值