2017-10-17 23 views
2

我刚开始使用Sklearn(MLPRegressor)和Keras(Sequential,有Dense图层)。有没有在python(sklearn/keras)中使用余弦相似度而不是点积的方法

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

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

+0

检查此HTTPS:/ /stackoverflow.com/questions/43357732/how-to-calculate-the-cosine-similarity-between-two-tensors/43358711#43358711 –

回答

1

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

它肯定可以在Tensorflow中实现。请注意,在TF中,您可以明确定义图层。

例如在this snippet你需要添加正常化25行,即您可以通过输入行的适当规范划分输出行tf.nn.sigmoid(tf.matmul(X, w_1))(您可以使用tf.nn.l2_normalizedim=1让他们)

+0

谢谢!所以基本上我会有:'h = tf.nn.sigmoid(tf.matmul(X,w_1)\ tf.matmul(tf.nn.l2_normalize(X,dim = 1),tf.nn.l2_normalize(w_1)) '? –

+0

或者可能是 'h = tf.nnsigmoid(tf.divide(tf.matmul(X,w_1),tf.matmul(tf.nn.l2_normalize(X,dim = 1),tf.nn.l2_normalize (w_1))))' –

+0

同样,运行这个例子,我们看到测试的准确性是100%vs 96%的训练?这怎么可能? –