pytorch

pytorch一些容易忘记的语法

创建long类型的数据,具体有多少种类,可以参考pytorch官网给出的链接.

torch.zeros(5,3,dtype=torch.long)  
torch.zeros(5,3).long()

x.add_ 后面加了下划线,会改变原来x的值

如果张量只有一个元素,可以用.item()将值取出来,作为python的数值类型。大于等于两个以上,会报错

numpy的array和torch的tensor共享底层的存储空间,一个被改变,另一个随之被改变

转换关系如下所示:

x = torch.rand(2)
x.numpy()
----------------------
x = np.rand(2)
x = np.random.rand(2)
torch.from_numpy(x)

torch.Tensor是整个package中的核心类,如果将其属性.requires_grad设置为True,它将追踪在这个类上定义的所有操作。当代码要进行反向传播时,直接调用.backward()就可以自动计算梯度。在这个Tensor上所有的梯度将会被累计进.grad属性中。
如果想终止一个Tensor在计算图中的追踪回溯,只需要执行.detach()就可以将该Tensor从计算图中撤下,在未来的回溯计算中也不会计算该Tensor。
除了.detach(),如果想终止对计算图的回溯,也可以采用with torch.no_grad()这种形式
Function类和Tensor类是同等重要的核心类,它和Tensor类共同构成了一个完整的类。每一个Tensor拥有.grad_fn属性,代表引用具体哪个Function创建了该Tensor。如果某个Tensor是用户自定义的,那么其对应的grad_fn is None
.grad:属性值
.grad_fn:这一步的运算使用了什么函数
requires_grad:是否加入计算图
(以上三个是autograd中最重要的三个量)

X1 = torch.ones(3,3)
print(X1)

x = torch.ones(2,2,requires_grad=True)
print(x)

y = x + 2
print(y)

print(x.grad_fn)
print(y.grad_fn)
--------------------
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
tensor([[3., 3.],
        [3., 3.]], grad_fn=<AddBackward0>)
None
<AddBackward0 object at 0x000002DA049D80F0>

.requires_grad_():该方法可以原地改变Tensor的属性,如果没有默认为False

a = torch.rand(2,2)
a = (a*3)/(a-1)
print(a.requires_grad)
a.requires_grad_(True) # 注意,这里后面有个下划线
print(a.requires_grad)
b = (a*a).sum()
print(b.grad_fn)
-------------------
False
True
<SumBackward0 object at 0x000002DA0656FDA0>

如何比较两个张量完全相同

x = torch.ones(2,2)
y = torch.ones(2,2)
x.eq(y).all()
--------------------
tensor(True)

初始化权重

    def init_weight(self):
        initrange = 0.5
        # embedding,fc层参数服从均匀分布。一开始如果都是初始化为全0的,比较难以训练
        self.embedding.weight.data.uniform_(-initrange, initrange)
        self.fc.weight.data.uniform_(-initrange, initrange)
        # 偏置项初始化为0
        self.fc.bias.data.zero_()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值