728x90
RNN (Recurrent Neural Network)
- 입력하는 데이터의 순서에 영향을 받는다.
- 음성, 텍스트 등 데이터의 크기가 가변적이다.
- data shape = ( batch size, sequence length, input data dimension)
- hidden state : 같은 값이 둘로 나뉘기 때문에 hidden size와 output size는 같다.
- pytorch에서는 batch size와 sequence length를 자동으로 파악할 수 있다.
Seq2Seq
- encoder : 입력된 seqeunce를 vector로 변환한다.
- decoder : vector를 hidden state로 하여 output을 생성한다.
- SOS_token : decoder의 시작 / EOS_token : 각 sequence의 끝
class Encoder(nn.Module):
def __init__(self, input_size, hidden_size):
super(Encoder, self).__init__()
self.hidden_size = hidden_size
self.embedding = nn.Embedding(input_size, hidden_size)
self.gru = nn.GRU(hidden_size, hidden_size)
def forward(self, x, hidden):
x = self.embedding(x).view(1,1,-1)
x, hidden = self.gru(x, hidden)
return x, hidden
class Decoder(nn.Module):
def __init__(self, input_size, hidden_size):
super(Decoder, self).__init__()
self.hidden_size = hidden_size
self.embedding = nn.Embedding(input_size, hidden_size)
self.gru = nn.GRU(hidden_size, hidden_size)
self.out = nn.Linear(hidden_size, output_size)
self.softmax = nn.LogSoftmax(dim=1)
def forward(self, x, hidden):
x = self.embedding(x).view(1,1,-1)
x, hidden = self.gru(x, hidden)
x = self.softmax(self.out(x[0]))
return x, hidden
Padding & Packing
- sequence의 길이가 일정하지 않은 경우가 대부분이다.
- padding : 가장 긴 sequence를 기준으로 다른 sequence의 비어있는 부분을 token으로 채운다.
- packing : 각 sequence의 길이를 데이터에 포함한다. (단, 길이가 긴 순으로 정렬해야 한다.)
'ML_DL > 딥러닝 공부하기' 카테고리의 다른 글
[자연어처리] Word Embedding (1) | 2023.10.14 |
---|---|
이미지 불러오기 (0) | 2023.08.09 |
[파이토치로 시작하는 딥러닝] Part-3 CNN (0) | 2023.07.02 |
[파이토치로 시작하는 딥러닝] Part-2 DNN (0) | 2023.07.02 |
[파이토치로 시작하는 딥러닝] Part-1 Basic ML (0) | 2023.06.24 |