๊ฐ์ฑ ๋ถ๋ฅ ๋ชจ๋ธ ๊ตฌํ ์๋ฆฌ์ฆ (1) | CNN
๐ฉ๐ซ ๋ชจ๋ธ ํด๋์ค
class RNN(nn.Module):
def __init__(self, vocab_size, embed_dim, hidden_dim, n_layers, dropout, num_class, device):
super(RNN, self).__init__()
self.device = device
self.n_layers = n_layers
self.hidden_dim = hidden_dim
self.embed = nn.Embedding(vocab_size, embed_dim)
self.dropout = nn.Dropout(p=dropout)
self.gru = nn.GRU(embed_dim, self.hidden_dim, self.n_layers, batch_first=True)
self.linear_layer = nn.Linear(self.hidden_dim, num_class)
def forward(self, sentence):
x = self.embed(sentence)
init_hidden = torch.zeros(self.n_layers, x.size(0), self.hidden_dim).to(self.device)
output, _ = self.gru(x, init_hidden)
t_hidden = output[:, -1, :]
self.dropout(t_hidden)
logits = self.linear_layer(t_hidden)
return logits
๐ฏ ํ๋ผ๋ฏธํฐ
โป ๋ชจ๋ธ ๊ตฌ์กฐ์ ์ง์ ์ ์ธ ์ฐ๊ด์ด ์๋ ํ๋ผ๋ฏธํฐ๋ง ์ ๋ฆฌ
โฝ vocab_size: vocab ํฌ๊ธฐ. vocab์ ๋ค์ด์๋ ๋จ์ด์ ๊ฐ์
โฝ embed_dim: ์๋ฒ ๋ฉ ๋ฒกํฐ ์ฐจ์
โฝ hidden_dim: hidden state h์ feature ์
โฝ n_layers: recurrent layer์ ์
โฝ num_class: ํ๊ฒ์ด ๋๋ ๋ ์ด๋ธ ์
โณ ์๋ ๋ฐฉ์
1. __init__
1) nn.GRU(input_size, hidden_size, num_layers, batch_first=True)
โฝํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ GRU ๊ตฌ์กฐ๋ฅผ ์ ํ ํ๋ ๋๋์ผ๋ก ์ดํดํ๋ค. batch_first๋ default๊ฐ False์ธ๋ฐ batch_first=False์ด๋ฉด (์ํ์ค ๊ธธ์ด, ๋ฐฐ์น ํฌ๊ธฐ, ์ ๋ ฅ ์ฌ์ด์ฆ) ์ด ํํ๋ก GRU ์ ์ ์ ๋ ฅ์ ๋ฐ๋๋ค. batch_first=True๋ (๋ฐฐ์น ํฌ๊ธฐ, ์ํ์ค ๊ธธ์ด, ์ ๋ ฅ ์ฌ์ด์ฆ) ํํ๋ก ์ ๋ ฅ์ ๋ฐ๋๋ค.
2. forward
1) init_hidden = torch.zeros(~)
โฝ ์ด๊ธฐ hidden state์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ชจ๋ 0์ด๊ณ ํฌ๊ธฐ๋ง ๋ง์ถฐ ์ด๊ธฐํํ๋ ์ญํ ์ด๋ค.
2) output, _ = self.gru(x, init_hidden)
โฝ ์ ๋ ฅ x์ hidden_state๋ฅผ ๊ฐ์ด ๋ฃ์ด์ฃผ๋ฉด GRU ์ ์ ๊ฑฐ์น๊ณ ๋ ํ์ output๊ณผ hidden state๋ฅผ ์ถ๋ ฅํ๋ค. GRU ํ ์คํธ ๋ถ๋ฅ ์ฝ๋๋ฅผ ์ข ์ฐพ์ ๋ณด๋๊น hidden state๋ ์ ์ฐ๊ณ output ๊ฐ๋ง์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด๋ ์๊ด ์๋ ๊ฒ ๊ฐ์๋ฐ, ์ด ๋ถ๋ถ์ ๋ํด์๋ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ๊ฐ ํ์ํ ๋ฏ ํ๋ค.
โ ์ ๋ ฅ x ์ฐจ์: torch.Size([16(๋ฐฐ์น ํฌ๊ธฐ), 152(์ํ์ค ์ต๋ ๊ธธ์ด), 100(์๋ฒ ๋ฉ ๋ฒกํฐ ์ฐจ์)])
โก ์ถ๋ ฅ output ์ฐจ์: torch.Size([16, 152, 150(hidden ๋ ์ด์ด ์ฐจ์])
3) t_hidden = output[:, -1, :]
โฝ output ๋ฒกํฐ์์ 0๋ฒ์งธ ์ฐจ์(ํ)×2๋ฒ์งธ ์ฐจ์(์ด) ํฌ๊ธฐ๋ก ๋ฒกํฐ ํํ๋ฅผ ๋ฐ๊พผ๋ค.
โข t_hidden ์ฐจ์: torch.Size([16, 150])
4) logits = self.linear_layer(t_hidden)
โฝ 16*150 ํฌ๊ธฐ์ธ t_hidden ๋ฒกํฐ์ 150*6 ํฌ๊ธฐ์ Linear ๋ ์ด์ด ๊ฐ ์ฐ์ฐ์ ์ํํ๋ค.
โฃ ์ต์ข logits ์ฐจ์: torch.Size([16, 6])
'๐ฉโ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ ๋ฆฌ๋ทฐ] ๋ ธ๋ ์ธต ๋ํ ๊ฐ์ฑ ๋ถ๋ฅ ๋ชจ๋ธ ๊ตฌํ (3): Transformer โ (0) | 2022.12.27 |
---|---|
[์ฝ๋ ๋ฆฌ๋ทฐ] ๋ ธ๋ ์ธต ๋ํ ๊ฐ์ฑ ๋ถ๋ฅ ๋ชจ๋ธ ๊ตฌํ (1) : CNN (0) | 2022.12.13 |
[ART] attack_adversarial_patch_TensorFlowV2.ipynb ์ฝ๋ ๋ถ์ (0) | 2022.01.19 |
[ART] attack_defence_imagenet.ipynb ์ฝ๋ ์ค์ต (0) | 2022.01.18 |
[ART] adversarial_training_mnist.ipynb ์ฝ๋ ๋ถ์ (0) | 2022.01.12 |