我使用Keras做一些实验,我只是监督权更新了一个简单的MLP模型:`layer.get_weights()`返回什么?
# model contains one input layer in the format of dense,
# one hidden layer and one output layer.
model=mlp()
weight_origin=model.layers[0].get_weights()[0]
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(.....) # with adam optimizer
weight_updated=model.layers[0].get_weights()[0]
print weight_origin-weight_updated
对于第一致密层,我得到了零矩阵。我认为训练不会改变这个重量。但是,其他图层中的权重会发生变化。所以我很困惑,为什么第一层没有改变? 我检查了源代码,但仍然没有得到答案,然后我试图监控:
model.layers[0].get_weights()[1] # get_weight() returns a list of weights
这一次,权做了改变。所以我想知道在训练过程中哪个重量是真正的重量?为什么权重列表中有两个元素?
的mlp()
定义:
def mlp():
model=Sequential()
model.add(Dense(500, input_dim=784))
model.add(Dense(503,init='normal',activation='relu'))
model.add(Dense(503,init='normal',activation='relu'))
model.add(Dense(10, activation='softmax'))
return model
你能否给我们提供mlp()函数?这真是奇怪的行为 –
@MarcinMożejko我已经更新了它。我对'layer.weights'列表中的第二个权重感到困惑。 –
你编译过你的模型吗? –