3dgs源码学习:python基础知识补充
torch.nn.Parameter
orch.nn.Paramete
r是torch.Tensor
的一个子类,使用它可以方便地声明模型的可学习参数。与一般的Tensor
不同,Parameter
会被自动添加到模型的参数列表中,并且可以被自动更新。与普通的Tensor
一样,Parameter
也可以进行各种张量运算,例如加法、乘法和卷积等。
优势
首先,Parameter
对象的存在使得模型的结构更加清晰,我们可以通过查看模型的参数列表来了解模型的参数情况。这对模型的可读性和可维护性都有很大的帮助。
其次,Parameter
对象的更新是自动进行的,无需手动编写参数的更新代码。PyTorch会自动追踪所有依赖于Parameter的计算过程,并在反向传播时更新参数的梯度。这样,我们就不必担心遗漏了某个参数的更新操作,提高了代码的健壮性。
最后,Parameter
对象的使用非常方便。我们可以像使用普通张量一样使用Parameter
,进行各种张量运算,例如加法、乘法和卷积等。这使得我们可以直接对参数进行操作,而无需额外的转换操作。
contiguous()
将原来张量重新复制一份新的,不改变元数据的值,只改变复制后的值
```python
x = torch.randn(3, 2)
y = torch.transpose(x, 0, 1)
print("修改前:")
print("x-", x)
print("y-", y)
print("\n修改后:")
y[0, 0] = 11
print("x-", x)
print("y-", y)
运行结果:
运行结果:
修改前:
x- tensor([[-0.5670, -1.0277],
[ 0.1981, -1.2250],
[ 0.8494, -1.4234]])
y- tensor([[-0.5670, 0.1981, 0.8494],
[-1.0277, -1.2250, -1.4234]])
修改后:
x- tensor([[11.0000, -1.0277],
[ 0.1981, -1.2250],
[ 0.8494, -1.4234]])
y- tensor([[11.0000, 0.1981, 0.8494],
[-1.0277, -1.2250, -1.4234]])```
使用contiguous()
当调用contiguous()时,会强制拷贝一份tensor,让它的布局和从头创建的一模一样,但是两个tensor完全没有联系。
x = torch.randn(3, 2)
y = torch.transpose(x, 0, 1).contiguous()
print("修改前:")
print("x-", x)
print("y-", y)
print("\n修改后:")
y[0, 0] = 11
print("x-", x)
print("y-", y)``
运行结果:
修改前:
x- tensor([[ 0.9730, 0.8559],
[ 1.6064, 1.4375],
[-1.0905, 1.0690]])
y- tensor([[ 0.9730, 1.6064, -1.0905],
[ 0.8559, 1.4375, 1.0690]])
修改后:
x- tensor([[ 0.9730, 0.8559],
[ 1.6064, 1.4375],
[-1.0905, 1.0690]])
y- tensor([[11.0000, 1.6064, -1.0905],
[ 0.8559, 1.4375, 1.0690]])