keras自定义Layer实现类似Lamda层中w1*x+w2*y

    这篇博客的目的是利用keras自定义Layer实现类似Lamda层中w1x+w2y的功能,只不过这个w1和w2由网络训练得到,下面是本人亲测的实现。

import keras.engine as KE

class ClassifierLayer(KE.Layer):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def build(self, input_shape):
        self.w1 = self.add_weight(shape=(1,), name="kernel1", trainable=True, initializer=KI.random_uniform(minval=0, maxval=1.0))
        self.w2 = self.add_weight(shape=(1,), name="kernel2", trainable=True, initializer=KI.random_uniform(minval=0, maxval=1.0))
        super().build(input_shape)

    def call(self, inputs, **kwargs):
        return self.w1 * inputs[0] + self.w2 * inputs[1]

    def compute_output_shape(self, input_shape):
        return input_shape

    调用的时候直接和那些Conv2D Layer的调用一样,即:

x = ClassifierLayer(name="scores_add")([score1, score2])

    用Netron打开H5模型,可以看到我们自定义的层及其可学习的参数。(名字是我专门改的,所以和代码对不上)
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值