我在子类初始化程序中设置了一个属性,似乎被awk -F',' 'NR==FNR {a[$1]=$3 ;next} !($3 in a) {print }' OFS='\t' file1 file2
的调用覆盖了。
super().__init__
我会假设from keras.layers import GRU, wrappers
class Dummy(wrappers.Wrapper):
def __init__(self, layer, **kwargs):
self.stateful = True
print(self.stateful)
super().__init__(layer, **kwargs)
print(self.stateful)
In [3]: dummy = Dummy(GRU(64, stateful=True))
True
False
In [4]: dummy.stateful
Out[4]: False
中的某些内容覆盖了该属性,但内置的包装器子类Bidirectional
具有几乎相同的超类init调用(我基本上遵循了我的实现中此子类的模式)< / p>
wrappers.Wrapper
没有证明这种行为
class Bidirectional(Wrapper):
def __init__(self, layer, merge_mode='concat', weights=None, **kwargs):
...
self.stateful = layer.stateful
...
super(Bidirectional, self).__init__(layer, **kwargs)
我无法绕过这个。我在Python 3.6下使用Keras 2.1.3。
P.S。
我已经尝试用我的子类中的In [6]: bidir = wrappers.Bidirectional(GRU(64, stateful=True))
In [7]: bidir.stateful
Out[7]: True
替换super().__init__(layer, **kwargs)
无效。
答案 0 :(得分:2)
您正在查看Bidirectional
源代码的错误版本。从三天前开始,您所看到的版本似乎是this one。我相信该版本与您的代码有相同的错误。
我认为的代码是super().__init__
的{{1}}来自__init__
的{{1}} {/ 1}} {/ 1>}
def __init__(self, layer, merge_mode='concat', weights=None, **kwargs):
super(Bidirectional, self).__init__(layer, **kwargs)
...
这样,它的行为发生在祖先构造函数的动作之后,它的self.stateful
赋值会覆盖它的祖先。