使用pytorch时使用for循环在python中创建self属性
Posted
技术标签:
【中文标题】使用pytorch时使用for循环在python中创建self属性【英文标题】:Create self attributes in python using for loop when using pytorch 【发布时间】:2020-02-03 16:05:10 【问题描述】:在 pytorch 中,创建层可以是半自动化的,这就是使用 for 循环的原因。
其中一个主要问题是这些层不能存储在列表或字典中,否则反向传播将不起作用。
这就是解决问题的原因。
在对象内,分配新的self
属性
如何替换这个
self.res1 = 1
self.res2 = 2
self.res3 = 3
有了这个
for i in range(2):
res_name = 'res'+str(i+1)
self.res_name = i
既然我已经以这种方式创建了对象,我该如何以同样的方式访问它们。例如,如果我们假设 self.res_name 现在是一个对象?
for i in range(2):
res_name = 'res'+str(i+1)
out = self.res_name(out)
【问题讨论】:
这不是真正可维护的。也许你需要一个dictionary。 也许您可以覆盖__getattr__
& __setattr__
以获得相同的效果,而无需进入动态属性。
使用 dict() ...
可能self.res
想成为一个列表
字典不能在pytorch中使用,因为它返回一个空的参数列表
【参考方案1】:
您可能应该改用dict
或list
。但如果你出于某种原因真的想要这个,你可以试试setattr(x, attr, 'magic')
。
因此,在你的情况下,它是
for i in range(1, 4):
res_name = 'res' + str(i)
setattr(self, res_name, i)
请参阅此相关question 了解更多信息。
【讨论】:
以上是关于使用pytorch时使用for循环在python中创建self属性的主要内容,如果未能解决你的问题,请参考以下文章
在pytorch中,有什么向量化的方法可以代替两个FOR循环来完成这个操作?