Keras添加自己的层

keras中添加自己的层需要用到keras.layers.core.Lambda这一操作,并且lambda 属于一元操作符,用于接收keras的上一层的tensor,当添加的层比较简单时可以直接将操作列于lambda 后,比如

x1       = keras.layers.core.Lambda(lambda x: K.batch_dot(x, K.transpose(x))(x1)

其中,通过以上操作可为model添加一个求x和自身的转置做矩阵乘法的层layer,x1为上一层输出的tensor。

当操作比较复杂时,可定义一个函数来实现添加layer,比如构建一个名为PAM的函数,把所有复杂操作放于PAM函数即可,需要强调的是PAM只能是一元函数,道理很简单,因为tensorflow的流中间可以分叉,但总输入和总输出的flow肯定只有一支。需要注意的是,当在类class中进行模型定义时,PAM不用定义为类中的方法,而是应该放到类外,否则会报错:

TypeError: ('Not JSON Serializable:', <X_module_FPM_3att.X_module object at 0x7fe651821198>)

其中,X_module_FPM_3att是py文件名,X_module是定义模型的类名。

因此,采用函数定义层时用如下方式:

x1       = Lambda(lambda x: PAM(x))(x1)

def PAM(x):
    m_batchsize, height, width, C = K.int_shape(x)
    x1 = Conv2D(C // 8, (1, 1), padding='same')(x)
    x2 = Conv2D(C // 8, (1, 1), padding='same')(x)
    x3 = Conv2D(C     , (1, 1), padding='same')(x)
    x2 = K.permute_dimensions(x2, [0, 3, 1, 2])

    proj_query = K.reshape(x1, [-1, width*height, C//8])

    proj_key   = K.reshape(x2, [-1, C//8, width*height])
    energy = K.batch_dot(proj_query, proj_key)
    attention = K.softmax(energy)
    proj_value = K.permute_dimensions(x3,[0, 3, 1, 2])
    proj_value = K.reshape(proj_value, [-1, C, width*height])
    out = K.batch_dot(proj_value, K.permute_dimensions(attention, [0, 2, 1]))
    out = K.reshape(out, [-1, C, height, width])
    out = K.permute_dimensions(out, [0, 2, 3, 1])
    out = keras.layers.add([x,out])


    return out

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值