有没有办法在python中使用余弦相似性而不是点积(sklearn / keras)

时间:2017-10-17 14:47:46

标签: machine-learning python deep-learning

我刚开始使用Sklearn(MLPRegressor)和Keras(顺序,带有密集层)。

今天我读了this论文,描述了如何使用余弦相似度而不是点积来提高性能。这基本上说,如果我们用f(w^Tx)替换f((w^Tx)/(|x||w|)),即我们不仅仅将点积提供给激活函数,但我们将其标准化,我们会获得更好更快的性能。

有没有办法在Python中执行此操作,特别是在SKlearn(或其他)的MLPRegressor或Keras中? (也许是TensorFlow?)

1 个答案:

答案 0 :(得分:1)

Sklearn使用预建网络,所以没有。我也不认为它在Keras中是可能的,因为它有预先构建的层。

确实可以在Tensorflow中实现。请注意,在TF中,您可以显式定义图层。

例如在this snippet中,您需要在第25行添加规范化,即您可以通过适当的输入行规范划分输出行tf.nn.sigmoid(tf.matmul(X, w_1))(您可以使用tf.nn.l2_normalize获取它们与dim=1