如何在Keras中为Conv2D提供3D滤镜?

时间:2018-06-22 16:37:25

标签: keras conv-neural-network

我的输入图像有8个通道,我的输出(标签)有1个通道,我在keras中的CNN如下:

def set_model(ks1=5, ks2=5, nf1=64, nf2=1):
    model = Sequential()
    model.add(Conv2D(nf1, padding="same", kernel_size=(ks1, ks1), 
                     activation='relu', input_shape=(62, 62, 8)))
    model.add(Conv2D(nf2, padding="same", kernel_size=(ks2, ks2), 
                                              activation='relu'))
    model.compile(loss=keras.losses.binary_crossentropy,
                  optimizer=keras.optimizers.Adadelta())
    return model

我在这里使用的过滤器对于所有8个通道都是相同的。我想拥有一个3D滤镜,类似于(8,5,5),这样每个通道都有一个单独的滤镜,因为这些通道的重要性不同。

下面是上面实现的模型的摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 62, 62, 64)        12864     
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 62, 62, 1)         1601      
=================================================================
Total params: 14,465
Trainable params: 14,465
Non-trainable params: 0
_________________________________________________________________

当我得到第一层权重的形状时,我得到以下结果:

for layer in model.layers:
    weights = layer.get_weights()

len(weights)
2

a = np.array(weights[0]) 
a.shape
(5, 5, 64, 1)

我想知道第一层权重的形状在8哪里?

0 个答案:

没有答案