如何访问DNN的学习权重,如下所示:
lstm_network_output.save(model_path)
答案 0 :(得分:3)
可以通过调用'lstm_network_output.parameters'来访问网络的权重/参数,该参数返回“参数”变量对象的列表。可以使用numpy数组形式的Parameter对象的'value'属性获取Parameter的值。参数的值可以通过'.value ='更新。
答案 1 :(得分:0)
如果您在创建模型时使用了name=
属性,则还可以按名称识别图层。例如:
model = Sequential([Embedding(300, name='embed'), Recurrence(LSTM(500)), Dense(10)])
E = model.embed.E # accesses the embedding matrix of the embed layer
要知道参数是.E
,请参阅相应功能的文档字符串(例如help(Embedding)
)。 (在Dense
和Convolution
中,参数为.W
和.b
。)
上面的模式适用于使用as_block()
创建的命名图层。您还可以命名中间变量,并以相同的方式访问它们。 E.g:
W = Parameter((13,42), init=0, name='W')
x = Input(13)
y = times(x, W, name='times1')
W_recovered = y.times1.W
# e.g. check the shape to see that they are the same
W_recovered.shape # --> (13, 42)
W.shape # --> (13, 42)
从技术上讲,这将搜索所有提供y
的参数。如果网络更复杂,您最终可能会有多个同名参数。然后由于模糊性将引发错误。在这种情况下,您必须使用Anna的回复中提到的.parameters
元组。
答案 2 :(得分:0)
此python代码对我有用,以可视化一些权重:
import numpy as np
import cntk as C
dnnFile = C.cntk_py.Function.load('Models\ConvNet_MNIST_5.dnn') # load model from MS example
layer8 = dnnFile.parameters()[8].value()
filter_num = 0
sliced = layer8.asarray()[ filter_num ][ 0 ] # shows filter works on input image
print(sliced)