为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2021-09-25 16:35:59
我正在两个不同的 keras 层之间实现自定义连接。神经网络开始如下:from tensorflow.keras.layers import Dense, Conv2D, Flatten, AveragePooling2Dimport tensorflow as tffrom keras.models import Modelfrom tensorflow.keras.layers import Conv2D, Input, Concatenate, Lambda, AddinputTensor = Input(shape=( 32, 32,1))stride = 1c1 = 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
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

好的,所以您可以访问 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]。


查看完整回答
反对 回复 2021-09-25
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号