我使用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'列表中的第二個權重感到困惑。 –
你編譯過你的模型嗎? –