Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- MySQL
- 1단계
- ssd
- 전산기초
- Object detection
- 프로그래머스
- 머신러닝
- 실전알고리즘
- 코드수행
- 딥러닝
- AWS
- 3단계
- 백준
- 2단계
- CS231n
- 이것이 코딩테스트다 with 파이썬
- 파이썬
- C++
- 자료구조 및 실습
- 구현
- Python
- cs
- pytorch
- 그리디
- STL
- test-helper
- SWEA
- docker
- ubuntu
- 모두를 위한 딥러닝 강좌 시즌1
Archives
- Today
- Total
곰퓨타의 SW 이야기
Lab 11-4 RNN timeseries 본문
부스트코스 강의를 들으면서 따라 쳤다!!
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