我一直在遵循一个教程,该教程显示了如何制作word2vec模型。
本教程使用以下代码:
similarity = merge([target, context], mode='cos', dot_axes=0)
(未提供其他信息,但我想这来自keras.layers
)
现在,我已经对merge
方法进行了一些研究,但是找不到很多。
据我了解,它已被许多功能(例如layers.Add(), layers.Concat()...
)取代。
我应该使用什么?有一个.Dot()
,它有一个axis
参数(看起来是正确的),但没有mode
参数。
在这种情况下我可以使用什么?
python大神给出的解决方案
Keras文档中有一些尚不清楚的事情,我认为了解这些至关重要:
对于Merge
的keras文档中的每个函数,都有一个小写和一个大写的定义,即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)
要回答您的问题,由于不建议使用Merge
,因此我们必须为cosine similarity
定义和构建一个层。通常,这将涉及使用小写的函数,将它们包装在Lambda
中以创建可在模型中使用的图层。
我找到了解决方法here:
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]
根据您的数据,您可能需要删除L2规范化。关于该解决方案要注意的重要一点是,它是使用Keras函数api构建的,例如K.mean()
-我认为在定义自定义层甚至损失函数时这是必要的。
希望我清楚,这是我的第一个SO答案!
Python sqlite3数据库已锁定 - python我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…
Python pytz时区函数返回的时区为9分钟 - python由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…
keras中的自定义RMSPE损失函数 - python我正在尝试在keras中定义我自己的损失函数,即均方根百分比误差。 RMSPE定义为:我已经将损失函数定义为:from keras import backend as K def rmspe(y_true, y_pred): sum = K.sqrt(K.mean(K.square( (y_true - y_pred) / K.clip(K.abs(y_tr…
用大写字母拆分字符串,但忽略AAA Python Regex - python我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…
如何打印浮点数的全精度[Python] - python我编写了以下函数,其中传递了x,y的值:def check(x, y): print(type(x)) print(type(y)) print(x) print(y) if x == y: print "Yes" 现在当我打电话check(1.00000000000000001, 1.0000000000000002)它正在打印:<…