곰퓨타의 SW 이야기

Lab 11-4 RNN timeseries 본문

인공지능/부스트코스_파이토치로 시작하는 딥러닝 기초

Lab 11-4 RNN timeseries

곰퓨타 2021. 3. 23. 20:28

부스트코스 강의를 들으면서 따라 쳤다!!

www.boostcourse.org/ai214/lecture/43777/?isDesc=false

 

파이토치로 시작하는 딥러닝 기초

부스트코스 무료 강의

www.boostcourse.org

 

 

 

Time series Data

serial data : 일정한 시간 간격으로 이루어진 데이터 

ex. 주가 데이터

 

 

Apply RNN

- Many-to-one

 

7일까지의 데이터를 가지고 8일차의 종가 데이터를 예측하는 모델을 만들어볼 예정이다.

 

- Data Reading

import torch
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt

# Random seed to make results deterministic and reproducible
torch.manual_seed(0)

# hyper parameters
seq_length = 7
# 시가, 최고가, 최저가, 거래량, 종가
data_dim = 5
hidden_dim = 10
# 마지막에는 종가 하나를 예약하는 것이다.
output_dim = 1
learning_rate = 0.01
iterations = 500


# load data
xy = np.loadtxt("data-02-stock_daily.csv", delimiter=",")
xy = xy[::-1]  # reverse order

# split train-test set
# 70% 는 train set, 나머지는 test set
train_size = int(len(xy) * 0.7)
train_set = xy[0:train_size]
test_set = xy[train_size - seq_length:]

# scaling data
# 모델 입장에서 주가와 거래량같은 것의 차이가 많이 큼
# --> 상대값으로 바꾸어 [0,1]로 나타낸다. (학습의 부담을 줄여주기 위해서)
train_set = minmax_scaler(train_set)
test_set = minmax_scaler(test_set)

# make train-test dataset to input
trainX, trainY = build_dataset(train_set, seq_length)
testX, testY = build_dataset(test_set, seq_length)

# convert to tensor
trainX_tensor = torch.FloatTensor(trainX)
trainY_tensor = torch.FloatTensor(trainY)

testX_tensor = torch.FloatTensor(testX)
testY_tensor = torch.FloatTensor(testY)

 

 

- Neural net setting

# network 선언 
class Net(torch.nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim, layers):
        super(Net, self).__init__()
        self.rnn = torch.nn.LSTM(input_dim, hidden_dim, num_layers=layers, batch_first=True)
        self.fc = torch.nn.Linear(hidden_dim, output_dim, bias=True)

    def forward(self, x):
        x, _status = self.rnn(x)
        x = self.fc(x[:, -1])
        return x


net = Net(data_dim, hidden_dim, output_dim, 1)

# loss & optimizer setting
criterion = torch.nn.MSELoss()
optimizer = optim.Adam(net.parameters(), lr=learning_rate)

 

 

- Training & Evaluation

# start training
for i in range(iterations):

    optimizer.zero_grad()
    outputs = net(trainX_tensor)
    loss = criterion(outputs, trainY_tensor)
    loss.backward()
    optimizer.step()
    print(i, loss.item())
    
  
plt.plot(testY)
plt.plot(net(testX_tensor).data.numpy())
plt.legend(['original', 'prediction'])
plt.show()

 

- Exercise

주식시장에는 변동이 되는 경우가 많아서, 5개의  feature만으로 예측하는 것은 어렵다.

뉴스나 트위터 키워드로 크롤링해서 예측해보는 사람들도 있다!!

'인공지능 > 부스트코스_파이토치로 시작하는 딥러닝 기초' 카테고리의 다른 글

Lab 11-6 PackedSequence  (0) 2021.03.23
Lab11-5 RNN seq2seq  (0) 2021.03.23
Lab 11-3 Long sequence  (0) 2021.03.23
Lab 11-2 RNN hihello and charseq  (0) 2021.03.23
Lab 11-1 RNN Basics  (0) 2021.03.23
Comments