记录使用pytorch构建网络模型过程遇到的点
各个模块,和网络模型的输入, 一定要是tensor
张量;
可以是一个列表,列表中的每一个项是张量,
如果是维度不够,需要升维度,
可以先使用 torch.unsqueeze(dim = expected)
然后再使用torch.cat(dim )
进行拼接;
numpy
, 或者先使用numpy, 然后再转换成张量的这种情况出现;这是因为pytorch的机制是只有是
Tensor
张量的类型,才会有梯度等属性值,如果是numpy这些类别, 这些变量并会丢失其梯度值。
当网络中的同一层中,存在多个相同的模块,
需要实例化多个相同模块, 且多个模块之间属于串行关系时,
可以直接使用 nn.sequential()
函数构建多个模块;
需要实例化多个模块, 且多个模块之间属于并行关系;
此时,可以使用python 自带的内置函数 setattr()
,
setattr(object, name, value)
object – 对象。
name – 字符串,对象属性。
value – 属性值。
对已存在的属性进行赋值:
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5) # 设置属性 bar 值
>>> a.bar
5如果属性不存在会创建一个新的对象属性,并对属性赋值:>>>class A():
... name = "runoob"
...
>>> a = A()
>>> setattr(a, "age", 28)
>>> print(a.age)
28
>>>