RNN 언어 모델의 코드를 살펴 보았습니다. 1) 훈련 쌍 (x, y)이 어떻게 구성되고 그 다음에 2) 손실이 계산되는지에 관해 혼란 스럽습니다. 이 코드는 Tensorflow RNN 튜토리얼 (독자 모듈)에서 가져옵니다.Tensorflow : 반복 신경망 훈련 쌍 및 손실 함수에 대한 영향
리더 모듈 내에서 생성자 ptb_iterator이 정의됩니다. 데이터를 하나의 시퀀스로 취하고 은 배치 크기와 RNN을 '언 롤 (unroll)'하려는 단계의 수에 따라 x, y 쌍을 산출합니다. 로 설명되어 있습니다
for i in range(epoch_size):
x = data[:, i*num_steps:(i+1)*num_steps]
y = data[:, i*num_steps+1:(i+1)*num_steps+1]
yield (x, y)
: 그렇다면
*Yields:
Pairs of the batched data, each a matrix of shape [batch_size, num_steps].
The second element of the tuple is the same data time-shifted to the
right by one.*
는 데이터 시퀀스 [1 2 3 4 5 6]
및 num_steps = 2
에 대해 제대로 이해 먼저 전체 정의하지만, 저를 혼동하는 부분을보고 가장 좋은 것은 이것이다 다음 확률 경사 하강을 위해 (즉 BATCH_SIZE = 1)의 다음 쌍을 생성 할 것이다 :
- X = [1,2], Y = [2,3] ,536,913 63,210
- X = [3,4], Y = [5,6]
1)이 이렇게 올바른 방법인가? 이해서는 안되므로 쌍 있음 :
- X = [1,2], Y = [2,3]
- X = [2,3], Y = [3,4] 은 ... # 1 이상의 데이터 포인트
OR
허용- X = [1,2], Y = [3]
- X = [2,3], Y = 4 ] ... # 모든 예측이 context length = num_step으로 이루어짐을 보장합니다. 의
2) 마지막으로, 그들은 reader 모듈에있는대로 교육에 관한 한 쌍은 손실이없는 계산 대신에 풀린 단계의 범위에서 RNN의 성능을 반영, 생성 된 주어진 num_steps
이 지정 되었습니까?
예를 들어, 모델은 2가 그 앞에 왔음을 고려하지 않고 x = 3 (x = [3,4]에서)에 대한 예측을 수행합니다 (즉 RNN을 두 단계가 아닌 한 단계로 풀림).