2017-05-08 5 views
0

最近、カスタマイズされたニューラルネットワークの作成を検討しています。基本的な構造は通常と同じですが、レイヤー間の接続を切り捨てたいと思っています。たとえば、2つの隠れたレイヤーを持つネットワークを構築すると、下の画像のようにいくつかの重みを削除して残ります。 Structure of customized neural networks 残念ですが、ここに画像を埋め込むことはできません。トレーニング中にニューラルネットワークのサブセット重みを固定する

これはオーバーフィッティングを避けるためのドロップアウトではありません。実際には、残りの重み(接続)は指定され、固定されます。対応する構造は意図的に設計されています。

Pythonでこれを行う方法はありますか? Tensorflow、pytorch、theanoまたは他のモジュール?

答えて

0

はい、これはテンソルフローで行うことができます。あなたのtensorflowコードでそうのようなものをいくつかの層を持っているでしょう

:あなたが欲しい

m = tf.Variable([width,height] , dtype=tf.float32 )) 
b = tf.Variable([height] , dtype=tf.float32 )) 
h = tf.sigmoid(tf.matmul(x,m) + b) 

はのは、殺すためにKそれを呼びましょう、いくつかの新しい行列です。特定の神経接続を殺すつもりです。神経接続は、mで定義されています。これはあなたの新しい構成になります

k = tf.Constant(kill_matrix , dtype=tf.float32) 
m = tf.Variable([width,height] , dtype=tf.float32 ) 
b = tf.Variable([height] , dtype=tf.float32 ) 
h = tf.sigmoid(tf.matmul(x, tf.multiply(m,k)) + b) 

あなたのkill_matrixは1と0の行列です。あなたが保持したい全ての神経接続に対して1を、そして殺したい全てに対して0を挿入してください。

+0

ありがとうございました。キルマトリックスは良く見えます。それは私にインスピレーションを与えます。やってみます。 – Yuan

+0

別の質問がありますか?この変更はAdamのようなオプティマイザに影響しますか?私の理解では、バックプロパゲーションを使用してウェイトを更新します。これで接続が切り捨てられ、バックプロパゲーションによって殺されたウェイトが更新されます。これはフィードフォワード処理に影響しません。あるいは、私は更新が行われるが、転送処理には影響を与えないので、この操作を解釈することができます。 – Yuan

+0

次に、説明を明瞭にするために、* kill層*を代わりに*ゲート層*または*抑制層*と呼ぶべきである。 Adam(または他のオプティマイザ)に関する質問に答えるには、**これはオプティマイザ**に悪影響を及ぼさない**です。 * suppress layer *は、抑制された(または**殺された**)接続を使用してフィードフォワードおよびバックプロパゲーションのステップを抑制します。 – Wontonimo

関連する問題