【问题标题】:Can we pass arguments to an instance variable?我们可以将参数传递给实例变量吗?
【发布时间】:2020-08-10 21:34:39
【问题描述】:
def select_action(self, state):
    probs = F.softmax(self.model(Variable(state, volatile = True))*100) # T=100
    action = probs.multinomial()
    return action.data[0,0]

self.model(...),其中 self.model 是 Network 类的一个实例。如果 self.model 是实例变量而不是方法,并且我们也没有创建新对象,那么它后面怎么会有括号呢?括号到底是做什么的,括号之间的参数是干什么用的?

【问题讨论】:

  • 如果类实现__call__()方法,类的实例可以是可调用对象,就像函数一样。
  • 我们还没有看到model 是在哪里定义的。如果它是def model(self, ...),那么它显然是一个实例方法。如前所述,任何实现__call__ 方法的东西都可以像函数一样被调用。其实函数就是实现__call__的对象。
  • class Dqn(): def __init__(self, input_size, nb_action, gamma): self.gamma = gamma self.reward_window = [] self.model = Network(input_size, nb_action) self.memory = ReplayMemory(100000) self.optimizer = optim.Adam(self.model.parameters(), lr = 0.001)

标签: python machine-learning neural-network parameter-passing artificial-intelligence


【解决方案1】:

在这种情况下,self.model 可能是一个实例“变量”,但它恰好是一个可调用(因为,正如您所注意到的,它本身就是一个 Network 的实例,并且必须实现__call__)

虽然实例上的属性通常是“简单”类型,例如 intstr,但它们没有理由不能是更“复杂”的东西,例如函数、类型或其他可调用的东西。

【讨论】:

  • class Dqn(): def __init__(self, input_size, nb_action, gamma): self.gamma = gamma self.reward_window = [] self.model = Network(input_size, nb_action) self.memory = ReplayMemory(100000) self.optimizer = optim.Adam(self.model.parameters(), lr = 0.001)
猜你喜欢
  • 2016-01-07
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 2022-06-17
  • 2013-06-11
  • 2010-12-13
  • 2023-04-01
相关资源
最近更新 更多