2017-04-23 4 views
0

私はこの簡単な2層フィードフォワードネットワークを持っており、これはMNIST数字を分類することになります。このネットワークでは、満足できる精度を得ることができますが、少し修正したいと思います。 Shrivastava et al.の論文に続いて、横方向モジュールなしでトップダウン変調を組み込みたい(3ページ参照)。また、これらの2つのレイヤーに限定して保存したいので、より深いネットワークを作成しないでください。基本的に、新しいネットワークでは、以下の単純なフィードフォワードネットワークとは対照的に、第2の層が第1の層に再び接続され、このトップダウンフィードバックリンクを達成する。トップダウン変調2層ネットワーク

TensorFlow(またはその他のライブラリについてはこの点については、これを行う方法については、他のソースコード/サンプルが見つかりませんでした。どんな助けや正しい方向へのプッシュも大変ありがとう!あなたが実際に言及

# PREVENTS VANISHING GRADIENT PROBLEM 
stddev1=np.sqrt(2/float(784)) 
# second = 10 units 
stddev2=np.sqrt(2/float(10)) 

w1 = tf.get_variable('w1',[784,10], 
        initializer=tf.random_normal_initializer(mean=0, stddev=stddev1)) 
b1 = tf.get_variable('b1',[10,], 
        initializer=tf.constant_initializer(0.0)) 
# relu has vanishing gradient problem 
z1 = tf.matmul(x, w1) + b1 
y1 = tf.nn.relu(z1) # 

# layer 2 
w2 = tf.get_variable('w2',[10,10], 
       initializer= tf.random_normal_initializer(mean=0,stddev=stddev2)) 
b2 = tf.get_variable('b2',[10,], 
        initializer=tf.constant_initializer(0.0)) 
y = tf.nn.softmax(tf.matmul(y1, w2) + b2, name="output") 

y_ = tf.placeholder(tf.float32, [None, 10]) 

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 

答えて

1

あなたが最初の層にあなたの第二の層を接続する場合、それはリカレントニューラルネットワーク(RNN)とないトップダウン変調になり、

紙は何もしませんでしたあなたが言うことのように、彼らは前のレイヤーで前のレイヤーだけを使用しますが、実際にはスキップ接続が好きです。

スキップ・コネクション(または層をスキップ)、このようなものです:enter image description here

あなたは私たちが一つに二つの層を集約するadd機能を使用して、SIP-層の後に見ることができるように、しかし、トップダウン変調を実現するための紙直前のレイヤーを次のレイヤーに直接接続するには、 'Lateral Modules'を使用します。

+0

これは意味があります。おそらく後の段階です。私が達成したいのは、z2がx(入力画像)に追加され、z1がxとz2の合計から計算されるということです。これにRNN細胞/ LSTM細胞を使用すべきですか?そして、この作品のようなものでしょうか(これは単層ですか?):[リンク](https://pythonprogramming.net/rnn-tensorflow-python-machine-learning-tutorial/) – coderjoe

+0

このようにしたい場合は: layer1 = x + z1、layer2 = x + layer1)ので、RNNは必要ありません。また、共有するリンクには複数のレイヤーが使用されます。 –

関連する問題