我一直在学习如何制作word2vec模型的教程.
本教程使用这段代码:
similarity = merge([target, context], mode='cos', dot_axes=0)(没有给出其他信息,但我想这来自keras.layers)
现在,我对该merge方法进行了一些研究,但我找不到多少.据我所知,它已被许多功能所取代layers.Add(), layers.Concat()....
我该怎么用?有.Dot(),有一个axis参数(似乎是正确的),但没有mode参数.
在这种情况下我可以使用什么?
isa*_*tan 15
Keras文档中有一些不清楚的事项,我认为这些内容对于理解是至关重要的:
对于keras文档中的每个函数Merge,有一个小写和大写的一个定义ie add()和Add().
在Github上,farizrahman4u概述了差异:
Merge is a layer.
Merge takes layers as input
Merge is usually used with Sequential models
merge is a function.
merge takes tensors as input.
merge is a wrapper around Merge.
merge is used in Functional API
Using Merge:
left = Sequential()
left.add(...)
left.add(...)
right = Sequential()
right.add(...)
right.add(...)
model = Sequential()
model.add(Merge([left, right]))
model.add(...)
using merge:
a = Input((10,))
b = Dense(10)(a)
c = Dense(10)(a)
d = merge([b, c])
model = Model(a, d)
Run Code Online (Sandbox Code Playgroud)
要回答你的问题,因为Merge已被弃用,我们必须自己定义和构建一个层cosine similarity.通常,这将涉及使用那些小写函数,我们在其中包装Lambda以创建我们可以在模型中使用的层.
from keras import backend as K
def cosine_distance(vests):
x, y = vests
x = K.l2_normalize(x, axis=-1)
y = K.l2_normalize(y, axis=-1)
return -K.mean(x * y, axis=-1, keepdims=True)
def cos_dist_output_shape(shapes):
shape1, shape2 = shapes
return (shape1[0],1)
distance = Lambda(cosine_distance, output_shape=cos_dist_output_shape)([processed_a, processed_b]
Run Code Online (Sandbox Code Playgroud)
根据您的数据,您可能希望删除L2规范化.关于解决方案的重要注意事项是它是使用Keras函数api构建的K.mean()- 例如,我认为在定义自定义层甚至丢失函数时这是必要的.
希望我很清楚,这是我的第一个SO答案!
| 归档时间: |
|
| 查看次数: |
7481 次 |
| 最近记录: |