Keras获取某层的权重 以及 权重结构

我用的是
model.layers[0].get_weights()
model.layers[index]按照index获得对应的层
层方法get_weights()获得这个层的权重
我是32个3*1的filters
model.layers[0].get_weights()返回的结构是一个list
list两个array
第一个array是3个1*1*32的数组
第二个array是1维32个元素的数组
由于我第一层是32个3*1的filters
所以如果我推测没错,最后一个array是偏置项,前面三个数组对应位置构成一个filter,为何内部是这样的结构,我也不是很明白,如果是我,我可能做成一个32*4的数组,4维数组从左到右依次是3个weight加上偏置项

model.get_weights()获得整个网络的全部weights
model.layers[0].output输出类似这样的结果
Tensor("conv2d_1/Relu:0", shape=(?, 22, 1, 32), dtype=float32)
这个和model.summary()的展示类似

2018.11.01更新
我已经确认了,结构就是如上所述,操作只需要把3*1*1*32的转置,压缩维度便可
a.T.reshape((32,3)),keras给的结构便是如此width*height*channel*filter个数,然后偏置项是单独的1维数组,length等于filter个数,但是更通俗的情况,我第二个卷积层是3*1*32*64,通道数变成了32,这个时候如果要把每个filter的weights取出来,就应该a[:,:,:,j]

留言

熱門文章