使用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】:

您可能应该改用dictlist。但如果你出于某种原因真的想要这个,你可以试试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属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中使用for循环进行追加工作

当 for 循环中不匹配时退出 python 脚本

在pytorch中,有什么向量化的方法可以代替两个FOR循环来完成这个操作?

Python for 循环中使用append()添加可变元素,前面的值被覆盖,循环中内存应用地址不变

python中for循环前面换行最后不换行

python(10):while循环