我正在尝试构建Relu层:
import numpy as npclass Relu: def __init__(self): self.mask = None def forward (self,x): self.mask = (x<=0) out = x.copy out[self.mask] = 0 return out def backward(self, dout): dout[self.mask]=0 dx = dout return dxactivation = Relu()out = activation.forward(np.random.rand(3,2))print(out)
错误信息是:
5 self.mask = (x<=0) 6 out = x.copy----> 7 out[self.mask] = 0 8 return out 9 def backward(self, dout):TypeError: 'builtin_function_or_method' object does not support item assignment
我使用的是教科书中的代码。然而,我无法执行Relu代码。这是环境设置问题吗?
回答:
你忘记在copy
后加括号了。现在,你只是将copy
函数赋值给了out
。它只是被引用了,而不是被调用。这里是更正后的代码。
import numpy as npclass Relu: def __init__(self): self.mask = None def forward (self,x): self.mask = (x<=0) out = x.copy() out[self.mask] = 0 return out def backward(self, dout): dout[self.mask]=0 dx = dout return dxactivation = Relu()out = activation.forward(np.random.rand(3,2))print(out)