我正在使用Keras做一些实验,我只是监控一个简单的mlp模型的重量更新:
# 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
Run Code Online (Sandbox Code Playgroud)
对于第一个密集层,我得到了一个零矩阵.我认为训练不会改变这个重量.但是,其他层的权重会发生变化.所以我很困惑,为什么第一层没有变化?我检查了源代码,但仍然没有回答,然后我尝试监控:
model.layers[0].get_weights()[1] # get_weight() returns a list of weights
Run Code Online (Sandbox Code Playgroud)
这一次,权重确实发生了变化.所以我想知道哪种重量是在训练期间起作用的"真实"重量?为什么重量列表中有两个元素?
定义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
Run Code Online (Sandbox Code Playgroud) 我正在使用Keras进行建模工作,我想知道是否可以通过索引或名称删除某些图层?目前我只知道model.pop()
可以做这项工作,但它只是删除最近添加的图层.另外,layers
是类型tensorvariable
和我不知道如何删除可以在numpy array
或中完成的某些元素list
.顺便说一下,我正在使用Theano后端.