在 Keras 2.0 上使用合并层 (lambda/function)?
Use Merge layer (lambda/function) on Keras 2.0?
我试图将 this 模型移植到 Keras
v2,但我在使用以下函数时遇到问题:
def __call__(self, sent1, sent2):
def _outer(AB):
att_ji = K.batch_dot(AB[1], K.permute_dimensions(AB[0], (0, 2, 1)))
return K.permute_dimensions(att_ji, (0, 2, 1))
return merge([self.model(sent1), self.model(sent2)], mode=_outer,
output_shape=(self.max_length, self.max_length))
根据文档,mode
是:
String or lambda/function. If string, must be one
of: 'sum', 'mul', 'concat', 'ave', 'cos', 'dot', 'max'.
If lambda/function, it should take as input a list of tensors
and return a single tensor.
新 Keras
版本中的等效函数(当模式为 function/lambda 时)是什么以避免以下警告:
UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.
return merge([attention, sentence], mode=_normalize_attention, output_shape=(self.max_length, self.nr_hidden))
一种实现模型的奇怪方式....(至少在 keras 2 中...)
看来您应该只使用带有自定义函数的 lambda 层。
def __call__(self, sent1, sent2):
def _outer(AB) #custom function
att_ji = K.batch_dot(AB[1], K.permute_dimensions(AB[0], (0, 2, 1)))
return K.permute_dimensions(att_ji, (0, 2, 1))
return Lambda(_outer,
output_shape=(self.max_length,self.max_length))([
self.model(sent1),
self.model(sent2)])
如果 self.model(sent)
returns 由 keras 层制作的张量,这应该有效。
现在,对于实际的合并层,在 keras 2 中你有这些层:
- 连接(轴=...)(张量列表)
- 添加()(张量列表)
- 乘法()(张量列表)
- And others,包括一个
Dot
层,"might" 与该函数的作用相同。
如果使用点层:
return Dot()([self.model(sent1),self.model(sent2)])
这需要测试。 keras 中的 dot 和 batch dot 是令人困惑的事情。
我试图将 this 模型移植到 Keras
v2,但我在使用以下函数时遇到问题:
def __call__(self, sent1, sent2):
def _outer(AB):
att_ji = K.batch_dot(AB[1], K.permute_dimensions(AB[0], (0, 2, 1)))
return K.permute_dimensions(att_ji, (0, 2, 1))
return merge([self.model(sent1), self.model(sent2)], mode=_outer,
output_shape=(self.max_length, self.max_length))
根据文档,mode
是:
String or lambda/function. If string, must be one of: 'sum', 'mul', 'concat', 'ave', 'cos', 'dot', 'max'. If lambda/function, it should take as input a list of tensors and return a single tensor.
新 Keras
版本中的等效函数(当模式为 function/lambda 时)是什么以避免以下警告:
UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.
return merge([attention, sentence], mode=_normalize_attention, output_shape=(self.max_length, self.nr_hidden))
一种实现模型的奇怪方式....(至少在 keras 2 中...)
看来您应该只使用带有自定义函数的 lambda 层。
def __call__(self, sent1, sent2):
def _outer(AB) #custom function
att_ji = K.batch_dot(AB[1], K.permute_dimensions(AB[0], (0, 2, 1)))
return K.permute_dimensions(att_ji, (0, 2, 1))
return Lambda(_outer,
output_shape=(self.max_length,self.max_length))([
self.model(sent1),
self.model(sent2)])
如果 self.model(sent)
returns 由 keras 层制作的张量,这应该有效。
现在,对于实际的合并层,在 keras 2 中你有这些层:
- 连接(轴=...)(张量列表)
- 添加()(张量列表)
- 乘法()(张量列表)
- And others,包括一个
Dot
层,"might" 与该函数的作用相同。
如果使用点层:
return Dot()([self.model(sent1),self.model(sent2)])
这需要测试。 keras 中的 dot 和 batch dot 是令人困惑的事情。