在CNN模型中,我们如何找到已使用的过滤器的初始化值

时间:2019-02-27 08:46:48

标签: machine-learning keras deep-learning conv-neural-network

我有cnn模型代码。

classifier = Sequential()
classifier.add(Convolution2D(32,3,3, input_shape = 
(256,256,3),activation = "relu"))
classifier.add(MaxPooling2D(pool_size = (2,2)))

所以现在我需要找到32个过滤器初始化时使用的值?任何有助于打印过滤器值的代码

2 个答案:

答案 0 :(得分:2)

这是默认的keras Conv2d初始化:kernel_initializer='glorot_uniform'(对于旧版本的keras,则为init='glorot_uniform')。

您可以在此处查看此初始化程序的作用:Keras initializers

最后,这是访问第一层权重的一种方法:

classifier = Sequential()
classifier.add(Convolution2D(32,3,3, input_shape = 
(256,256,3),activation = "relu"))
classifier.add(MaxPooling2D(pool_size = (2,2)))

first_layer = classifier.layers[0]
print(first_layer.get_weights()) # You may need to process this output tensor to get a readable output and not just a raw tensor

答案 1 :(得分:1)

从模型中获取相应的图层

layer = classifier.layers[0]  # 0th layer is the convolution in your architecture

每个卷积层都有两个变量(过滤器内核和偏移)。获取对应的

filters = layer.weights[0]  # kernel is the 0th index

现在过滤器包含您要查找的值,它是一个张量。要获取张量的值,请使用Keras后端的get_value()函数

import keras.backend as K
print(K.get_value(wt))

这将打印一个形状为(3,3,3,32)的数组,该数组将转换为3个通道的32个内核大小为3x3的滤镜。