2017-10-17 3 views
2

Sklearn(MLPRegressor)とKeras(Sequential、Denseレイヤー)を使い始めました。python(sklearn/keras)でドットプロダクトの代わりにコサイン類似度を使う方法はありますか?

今日、ドットプロダクトの代わりにコサインの類似性を使用することでパフォーマンスが向上する方法を説明するthis論文を読んでいます。これは、基本的に、f(w^Tx)f((w^Tx)/(|x||w|))に置き換えた場合、つまり、ドットプロダクトをアクティブ化関数に供給するのではなく正規化すると、より速く、より速いパフォーマンスが得られるということです。

これは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では、レイヤーを明示的に定義できます。あなたはつまり、あなたが入力行の適切な規範によって出力行tf.nn.sigmoid(tf.matmul(X, w_1))を分割することができ、ライン25で正規化を追加する必要があると思いthis snippetに例えば

(あなたがdim=1tf.nn.l2_normalizeを使用してそれらを取得することができます)

+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.matmul(X、w_1)、tf.matmul(tf.nn.l2_normalize(X、dim = 1)、tf.nn.l2_normalize (w_1)))) ') –

+0

また、テストの精度はトレーニングの96%に対して100%であることがわかります。どのように可能ですか? –

関連する問題