如何访问张量的单个特征图到 keras 层

我正在两个不同的 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


慕盖茨4494581
浏览 206回答 1
1回答

largeQ

好的,所以您可以访问 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)我做的唯一的事情是不是x对lambda的功能x[:,:,:,0],我将它作为x[:,:,:,0:1]。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python