首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个网络之间的参数化后期融合

两个网络之间的参数化后期融合
EN

Stack Overflow用户
提问于 2019-12-02 02:00:51
回答 1查看 72关注 0票数 0

我想将两个输出相似但输入不同的网络连接起来。输入分别是相同视频剪辑的光流和RGB版本。

我已经成功地连接了这两个网络,但我想使用一种融合参数来实验全局网络以不同的重要性级别对子网络进行训练的可能性。

因为我的网络是在Keras中实现的,所以我不知道如何使用这些函数https://keras.io/layers/merge/来实现

EN

回答 1

Stack Overflow用户

发布于 2019-12-02 04:21:08

你可以创建一个简单的可训练的乘以参数层...

代码语言:javascript
运行
复制
class MultiplyByTrainable(Layer):
    def __init__(self, **kwargs):
        super(MultiplyByTrainable, self).__init__(**kwargs)

    def build(self, input_shape):
        self.kernel = self.add_weight(name='kernel', 
                                      shape=(1,),
                                      initializer='ones',
                                      trainable=True)

        #optional self.bias = self.add_weight(name='kernel', 
        #                              shape=(1,),
        #                              initializer='zeros',
        #                              trainable=True)

        self.built = True

    def call(self, inputs):
        return inputs * self.kernel # + self.bias

    def compute_output_shape(self, input_shape):
        return input_shape

然后试着这样做:

代码语言:javascript
运行
复制
out1 = MultiplyByTrainable(name='net_mult_1')(net1_output)
out2 = MultiplyByTrainable(name='net_mult_2')(net2_output)
outputs = Add()([out1, out2]) #or Concatenate()([out1, out2])

或者你可以只使用一个非常基本的lambda层:

代码语言:javascript
运行
复制
w1 = someWeight
w2 = 1 - w1
out = Lambda(lambda x: w1 * x[0] + w2 * x[1])([net1_output, net2_output])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59128359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档