2017-10-17 20 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%的訓練?這怎麼可能? –