inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지

주가 예측 - 순환신경망(RNN)

텐서데이터 만들기 코드 관련 문의

387

메시림

작성한 질문수 7

0

안녕하세요.

 

아래 시퀀스데이터 만들 때 sequence_length 5일로 다음날 1일을 예측하는 것인데, 만약 5일로 3일을 예측하려고 하면 아래와 같이 변경하면 되나요?

기존 : y_seq.append(y[i+sequence_length])

변경 : y_seq.append(y[i+sequence_length+2])

 

[강사님 코드]

def seq_data(x, y, sequence_length):
    
    x_seq = []
    y_seq = []
    for i in range(len(x)-sequence_length):
        x_seq.append(x[i:i+sequence_length])
        y_seq.append(y[i+sequence_length])
    
    return torch.FloatTensor(x_seq).to(device), torch.FloatTensor(y_seq).to(device).view([-1, 1]) 

 

split = 200
sequence_length = 5

x_seq, y_seq = seq_data(X, y, sequence_length)
x_train_seq = x_seq[:split]
y_train_seq = y_seq[:split]
x_test_seq = x_seq[split:]
y_test_seq = y_seq[split:]
print(x_train_seq.size(), y_train_seq.size())
print(x_test_seq.size(), y_test_seq.size())

인공신경망 pytorch python 딥러닝 머신러닝 배워볼래요?

답변 3

0

메시림

RMSE코드도 변경을 해줘야 하는 것인가요?

RMSE 를 기존 코드 그대로 두고 하니 오류가 뜹니다.

 

오류 내용은 이해는 했는데, 어떤 부분을 수정해줘야 하는 것인지는 잘 모르겠어서 질문드립니다.

[오류 내용]

y_true and y_pred have different number of output (1!=3)

0

메시림

답변 감사합니다.

알려주신대로 코드 적용하고 taining 을 하는데, 아래와 같은 에러메시지가 뜹니다.

 

"The size od tensor a(3) must match the size of tensor b(2) at non-singleton dimension 1"  

 

아래 강사님 코드이며, bold 부분를 수정해야 할 것으로 보이는데, 어떤 오류 때문인지 혹시 알 수 있을까요?

loss_graph = []
n = len(train_loader)
for epoch in range(num_epochs):
    running_loss = 0.0
    
    for data in train_loader:
        
        seq, target = data # 배치 데이터 
        out = model(seq)
        loss = criterion(out, target)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    
    loss_graph.append(running_loss/n)
    if epoch % 100 == 0:
        print('[epoch: %d] loss: %.4f' %(epoch, running_loss/n))

0

딥러닝호형

out.shape, target.shape  확인하셔서 사이즈 맞춰주세요!

0

딥러닝호형

안녕하세요. 

 

i+sequence_length+2 는 i+sequence_length+2 번째를 저장하겠다는 의미입니다. 즉, +2  하셨으니 기존의 인덱스에서 2만큼 뒤 쪽 데이터를 저장한다는 의미이므로 타겟값이 하나가 되고 3일 뒤를 예측한다는 의미가 됩니다.

 

타겟값을 3개로 변경하실 경우에는 다음과 같은 부분을 수정하셔야 합니다.

1. 위에서 언급한 리스트 내의 인덱스를 i+sequence_length:i+sequence_length+3 으로 변경하셔야 합니다.

2. def seq_data내의 for문을 len(x)-sequence_length-3 까지 돌리셔야 합니다.

3. return 값의 view도 [-1,3]으로 변경하셔야 합니다.

4. LSTM의 마지막 노드 개수도 3으로 변경하셔야 합니다.

5. 마지막으로 모델의  아웃풋이 3개이므로 그래프를 어떻게 그리실 것인지 기준을 정해야합니다.

 

감사합니다.

0

메시림

안녕하세요.

 

위에 답변 주셨던  "2. def seq_data내의 for문을 len(x)-sequence_length-3 까지 돌리셔야 합니다." 관련해서, 제가 좀 이해가 안되는데, for문을 왜 len(x)-sequence_length-3 까지 돌리는 것인지 상세히 설명해주실 수 있을까요??

 

0

메시림

안녕하세요.

 

모델 아웃풋 3개에 대한 그래프를 그릴 때,  아래와 같이 변경하면 되는 걸까요?

기존 코드로 plot을 그리니 prediction 선이 3일 뒤로 밀려서 나와서 아래와 같이 +3을 넣으니 밀리지 않게 그려지더라구요.

 

기존 : plotting(train_loader, test_loader, df['Close'][sequence_length:].values)

변경 : plotting(train_loader, test_loader, df['Close'][sequence_length+3:].values)

 

[강사님 코드]

def plotting(train_loader, test_loader, actual):

    with torch.no_grad():

        train_pred = []

        test_pred = []

   

        for data in train_loader:

            seq, target = data # 배치 데이터 

            #print(seq.size())

            out = model(seq)

            train_pred += out.cpu().numpy().tolist()

            

        for data in test_loader:

            seq, target = data # 배치 데이터 

            #print(seq.size())

            out = model(seq)

            test_pred += out.cpu().numpy().tolist()

    total = train_pred+test_pred       

    plt.figure(figsize=(20,10))

    plt.plot(np.ones(100)*len(train_pred),np.linspace(0,1,100),'--', linewidth=0.6)

    plt.plot(actual,'--')

    plt.plot(total,'b', linewidth=0.6)

    

    

    plt.legend(['train boundary','actual','prediction'])

    plt.show() 

    

plotting(train_loader, test_loader, df['Close'][sequence_length:].values)

0

딥러닝호형

데이터의 가장 마지막 인덱스 len(x)-sequence_length-1을 i+sequence_length+3 여기에 넣어보시면 len(x)+2가 나옵니다. 즉, 데이터의 개수 len(x)보다 2가 더 많이 나오기때문에 -2를 빼주셔야 합니다. 제가 착각 했었네요. len(x)-sequence_length-3이 아니고 len(x)-sequence_length-2 입니다.

0

딥러닝호형

3일치 예측 결과가 나왔으므로 당연히 예측값들이 같은 날짜에 중첩하게 됩니다. 여기서 특별한 규칙이 없기 때문에 원하시는 기준을 정해서 그리시면 됩니다 :)

0

메시림

안녕하세요.

그래프를 그리고 있는데, 계속 중첩되게 그려지네요… 해결이 잘 되지 않는데, 중첩되지 않게 그리려면 강사님 코드에서 어떤 부분을 수정하면 될지 조언 부탁드려도 될까요??

수업자료 제공 부탁드립니다.

0

95

2

코드가 어디에 있는지 모르겠습니다.

0

93

2

논문 구현

0

184

2

overfitting이 나는 이유가 궁금합니다.

1

169

2

분류 성능이 잘 안 나오는 이유

0

217

1

AutoEncoder 차원 질문

1

250

2

사전 학습 모델에서의 layer 변경에 대한 질문

1

218

1

7강 폴더 만들

0

259

1

4-3강 cross-validation에서의 best model 선정 기준

0

447

1

regression 문제에 대한 결과 시각화

0

213

1

Loss function 관련하여 질문드립니다.

0

954

1

early stopping 코드 문의

0

325

1

예측 그래프

0

353

1

데이터 불균형

1

364

1

8강 전이 학습 질문

0

395

2

data의 gpu처리 질문

0

240

1

nn.Linear(1024, 10) 관련 질문드립니다.

0

287

1

학습과 평가시 Loss 함수가 다른 이유

0

249

1

전처리 관련해서 질문 있습니다.

0

224

1

데이터 엔지니어의 역량을 기르려면 어떻게 해야할까요?

0

933

2

역전파 내용 중 미분 관련 질문 드립니다

1

282

1

8강 전이학습에서 kernel size 관련 질문 드립니다.

1

956

1

이미지분류-합성곱신경망(CNN) 피쳐맵 질문입니다.

1

585

1

14강 데이터 불균형 RandomRotation

1

481

1