1

일련의 숫자 합계를 계산하기 위해 순환 네트워크를 구현하려고했습니다. 나는 입력의 길이가 고정되어 시작을하지만 가변 길이 시퀀스를 받아 만들려고 계획 5.시퀀스 합계 계산 - 반복 네트워크

예 :

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

I가 발생한 오전 문제는이, 또는 적어도 수렴하면 손실은 안정화됩니다. 모든 입력에 대해 동일한 출력을 제공합니다.

[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 또는 그와 같은 값이 될 수 있습니다.), 모든 입력에 대해 동일하게 적용됩니다.

선형 활성화를 사용하여 반복적 인 신경망으로이 문제를 해결할 수 있다고 가정합니다.

왜 네트워크가 "고정 된"값으로 수렴됩니까? 대신 lstm 층의 simple_rnn 사용

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

문제를 해결했다. 또한 반복적 인 레이어에서 하나의 노드 만 사용하게되었습니다. 하나의 입력과 하나의 출력이 있기 때문에, 이것은 의미가 있습니다.

코드는이 지금과 같은 편집에 대한 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)