【问题标题】:How to access individual feature map of tensors to keras layers如何将张量的单个特征图访问到 keras 层
【发布时间】:2018-12-25 14:12:14
【问题描述】:

我正在两个不同的 keras 层之间实现自定义连接。神经网络开始如下:

from tensorflow.keras.layers import Dense, Conv2D, Flatten, AveragePooling2D
import tensorflow as tf
from keras.models import Model
from tensorflow.keras.layers import Conv2D, Input, Concatenate, Lambda, Add

inputTensor = Input(shape=( 32, 32,1))
stride = 1
c1 = Conv2D(6, kernel_size=[5,5], strides=(stride,stride), padding="valid", input_shape=(32,32,1), 
                  activation = 'tanh')(inputTensor)
s2 = AveragePooling2D(pool_size=(2, 2), strides=(2, 2))(c1)

在这里,我想将我的自定义连接应用到输出大小为 10*10*16 的卷积层 c3(即需要在大小为 14*14*6 的 s2 上应用 16 个过滤器并获得输出10 * 10 * 16)。为此,我需要使用kernal_size = 5*5、filers=16、stride = 1 和padding=valid。

对于我的自定义连接,我想单独使用它们,而不是一次使用 s2 的所有 6 个特征图。我使用lambda函数如下:

例如,如果我想使用 s2 的第零个特征图并在其上应用 1 个过滤器,我正在执行以下操作:

group0_a = Lambda(lambda x: x[:,:,:,0], output_shape=lambda x: (x[0], x[1], x[2], 1))(s2)

conv_group0_a = Conv2D(1, kernel_size=[5,5], strides=(stride,stride), padding="valid", activation = 'tanh')(group0_a)

现在,我得到一个错误:

Input 0 of layer conv2d_10 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 14, 14] 代表group0_a

【问题讨论】:

    标签: python keras neural-network conv-neural-network


    【解决方案1】:

    好的,所以您可以访问 s2 的第零个特征图并对其应用 1 个过滤器,您可以按以下方式访问它:

    group0_a = Lambda(lambda x: x[:,:,:,0:1], output_shape=lambda x: (x[0], x[1], x[2], 1))(s2)
    
    conv_group0_a = Conv2D(1, kernel_size=[5,5], strides=(stride,stride), padding="valid", activation = 'tanh')(group0_a)
    

    我所做的唯一一件事就是将lambda 的x 改为x[:,:,:,0],而不是x,我将其传递为x[:,:,:,0:1]。

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2019-10-26
      • 2019-02-22
      • 2018-02-12
      • 2023-03-04
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      相关资源
      最近更新 更多