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
- 이것이 코딩테스트다 with 파이썬
- SWEA
- 1단계
- ubuntu
- pytorch
- 3단계
- 자료구조 및 실습
- 코드수행
- 구현
- 모두를 위한 딥러닝 강좌 시즌1
- 파이썬
- Object detection
- 그리디
- Python
- CS231n
- cs
- 딥러닝
- test-helper
- MySQL
- 실전알고리즘
- C++
- 머신러닝
- ssd
- 프로그래머스
- 백준
- 전산기초
- docker
- 2단계
- STL
- AWS
Archives
- Today
- Total
곰퓨타의 SW 이야기
Lab 11-3 Long sequence 본문
부스트 코스 강의를 보며 따라했다!!
www.boostcourse.org/ai214/lecture/43776/?isDesc=false
파이토치로 시작하는 딥러닝 기초
부스트코스 무료 강의
www.boostcourse.org
'longseq' example
longseq introduction
아주 긴 문장이 있다면 이를 잘라서 사용하고자 한다.
making sequence dataset from long sentence
하나의 window가 있다고 생각하고 옆으로 한자리씩 이동한다.
Code
# data setting
x_data = []
y_data = []
# window를 이동하면서 data를 저장한다.
for i in range(0, len(sentence) - sequence_length):
x_str = sentence[i:i + sequence_length]
y_str = sentence[i + 1: i + sequence_length + 1]
print(i, x_str, '->', y_str)
# character dictionary에 있던 index 값으로 저장한다.
x_data.append([char_dic[c] for c in x_str]) # x str to index
y_data.append([char_dic[c] for c in y_str]) # y str to index
# np.eye를 통해 one-hot vector로 바꾸어준다.
x_one_hot = [np.eye(dic_size)[x] for x in x_data]
# transform as torch tensor variable
X = torch.FloatTensor(x_one_hot)
Y = torch.LongTensor(y_data)
adding FC layer and stacking RNN
이번 강의에서는 stacking 후, Fully connected layer를 추가한 것을 만들어보고자 한다.
Code
# declare RNN + FC
class Net(torch.nn.Module):
def __init__(self, input_dim, hidden_dim, layers):
# constructor
super(Net, self).__init__()
self.rnn = torch.nn.RNN(input_dim, hidden_dim, num_layers=layers, batch_first=True)
self.fc = torch.nn.Linear(hidden_dim, hidden_dim, bias=True)
def forward(self, x):
x, _status = self.rnn(x)
x = self.fc(x)
return x
net = Net(dic_size, hidden_size, 2)
Code run through
# loss & optimizer setting
criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), learning_rate)
# start training
for i in range(100):
optimizer.zero_grad()
outputs = net(X)
loss = criterion(outputs.view(-1, dic_size), Y.view(-1))
loss.backward()
optimizer.step()
# 모델이 예측한 결과를 해석하기 위함
results = outputs.argmax(dim=2)
predict_str = ""
for j, result in enumerate(results):
# print(i, j, ''.join([char_set[t] for t in result]), loss.item())
# 맨 처음에는 sequence length만큼의 문자를 가져온다.
if j == 0:
predict_str += ''.join([char_set[t] for t in result])
# result에서 마지막에 해당하는 문자열만 추가해준다.
else:
predict_str += char_set[result[-1]]
print(predict_str)
'인공지능 > 부스트코스_파이토치로 시작하는 딥러닝 기초' 카테고리의 다른 글
Lab11-5 RNN seq2seq (0) | 2021.03.23 |
---|---|
Lab 11-4 RNN timeseries (0) | 2021.03.23 |
Lab 11-2 RNN hihello and charseq (0) | 2021.03.23 |
Lab 11-1 RNN Basics (0) | 2021.03.23 |
Lab 11-0 RNN intro (0) | 2021.03.23 |
Comments