keras中的Merge层(实现层的相加、相减、相乘)

【时间】2019.03.25

【题目】keras中的Merge层(实现层的相加、相减、相乘)

详情请参考:

Merge层

一、层相加

keras.layers.Add()

添加输入列表的图层。

该层接收一个相同shape列表张量,并返回它们的和,shape不变。

Example

import keras

input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
added = keras.layers.Add()([x1, x2])  # equivalent to added = keras.layers.add([x1, x2])

out = keras.layers.Dense(4)(added)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

二、层相减

SubStract

keras.layers.Subtract()

两个输入的层相减。

它将大小至少为2,相同Shape的列表张量作为输入,并返回一个张量(输入[0] - 输入[1]),也是相同的Shape。

Example

import keras

input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# Equivalent to subtracted = keras.layers.subtract([x1, x2])
subtracted = keras.layers.Subtract()([x1, x2])

out = keras.layers.Dense(4)(subtracted)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

三、层相乘

Multiply

keras.layers.Multiply()

该层接收一个列表的同shape张量,并返回它们的逐元素积的张量,shape不变。

 

注意:keras.layers.add(inputs)、keras.layers.subtract(inputs)、keras.layers.multiply(inputs)分别是对应的层包装,一般只用层包装。

 

 

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Keras的Attention层可以用于在深度学习模型实现注意力机制。注意力机制可以使模型更加关注输入数据的重要部分,从而提高模型的准确性和可解释性。下面是一个使用Keras实现注意力层的示例代码: ```python from keras import backend as K from keras.layers import Layer class Attention(Layer): def __init__(self, step_dim, **kwargs): self.step_dim = step_dim super(Attention, self).__init__(**kwargs) def build(self, input_shape): assert len(input_shape) == 3 self.W = self.add_weight(shape=(input_shape[-1],), initializer='normal', trainable=True) self.b = self.add_weight(shape=(input_shape[1],), initializer='normal', trainable=True) self.u = self.add_weight(shape=(input_shape[1],), initializer='normal', trainable=True) super(Attention, self).build(input_shape) def call(self, x, mask=None): et = K.dot(x, self.W) + self.b et = K.tanh(et) a = K.exp(K.dot(et, self.u)) if mask is not None: a *= K.cast(mask, K.floatx()) a /= K.cast(K.sum(a, axis=1, keepdims=True) + K.epsilon(), K.floatx()) a = K.expand_dims(a) weighted_input = x * a return K.sum(weighted_input, axis=1) def compute_output_shape(self, input_shape): return input_shape[0], input_shape[-1] ``` 这个Attention层的输入是一个三维的张量,形状为(batch_size, timesteps, input_dim),其timesteps表示时间步长,input_dim表示每个时间步的输入维度。输出是一个二维的张量,形状为(batch_size, input_dim)。 在这个Attention层,我们首先对每个时间步的输入进行一个线性变换,并使用tanh激活函数进行非线性变换。然后,我们计算一个注意力向量a,用于确定每个时间步输入的重要性。这个注意力向量是通过将tanh变换后的结果乘以一个可学习的权重向量u得到的。最后,我们将注意力向量应用于输入张量,得到加权的输入向量,然后将加权的输入向量求和,得到最终的输出向量。 在这个Attention层,我们还可以使用一个mask张量来表示输入数据的有效长度,这样我们就可以在计算注意力向量时忽略无效的时间步。这个Attention层还包括一些可学习的参数,如权重向量W、偏置向量b和注意力向量u。这些参数可以通过反向传播来训练。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值