1

私は、一連の数値の合計を計算するために反復ネットワークを実装しようとしています。私は、入力の長さが固定されてオフに開始するが、それは可変長シーケンスを受け入れるようにしようする予定5.シーケンスの合計を計算する - 反復ネットワーク

例:

[1,2,3,4,5] = 15 

私が遭遇しています問題は、それが、あるいは少なくとも収束したら、損失は​​安定していますが、どの入力に対しても同じ出力が得られます。

[3,4,5,1,1] = 134.59681 
[400,1,1,1,1] = 134.59681 
[32,42,55,1,1] = 134.59681 
[100,1,2,1,1] = 134.59681 

これまでのところ私は、異なる層の大きさ、異なる活性化関数と学習率を試してみました。しかし、それらはすべて同様の挙動をもたらす。それらが出力として与える値が変更されたとしても(134の代わりに-12など)、どの入力に対しても同じです。

私は線形活性化を使用してリカレントニューラルネットワークでこの問題を解決することが可能であると想定しています。

なぜネットワークは「固定」値に収束しますか? simple_rnn代わりのLSTM層を用い

sample_size = 512 
X = np.random.randint(1, 50, size=(sample_size, 5)) 
Y = [[np.sum(x)] for x in X] 
X = np.reshape(X, (-1, 5, 1)) 

net = tflearn.input_data(shape=[None, 5, 1]) 
net = tflearn.lstm(net, 32, dropout=0.9) 
net = tflearn.fully_connected(net, 1, activation='linear') 

regression = tflearn.regression(net, optimizer='adam', loss='mean_square', learning_rate=1.) 

m = tflearn.DNN(regression, tensorboard_dir='tnsbrd-logs/') 
m.fit(X, Y, n_epoch=2000, show_metric=True, snapshot_epoch=False) 
+0

コードは次のようになります。最初に、TFLearnがタグではないcrossvalidatedの質問を投稿したので、タイトルに入れました。 – ericwenn

答えて

1

は、問題を解決しました。 また、反復レイヤーでただ1つのノードを使用してしまいました。 1つの入力と1つの出力があるので、これは意味をなさない。編集用dandan78感謝@

sample_size = 64 
max_len = 5 

X = np.random.randint(1, 50, size=(sample_size, max_len)) + 0.0 
Y = [[np.sum(x)] for x in X] 
X = np.reshape(X, (-1, max_len, 1)) 


net = tflearn.input_data(shape=[None, max_len, 1]) 
net = tflearn.simple_rnn(net, 1, activation='linear', weights_init='normal') 

regression = tflearn.regression(net, optimizer='adagrad', loss='mean_square', learning_rate=.06, metric='R2',) 

m = tflearn.DNN(regression, tensorboard_dir='tnsbrd-logs/') 
m.fit(X, Y, n_epoch=10000, show_metric=True, snapshot_epoch=False) 
関連する問題