2018년 10월 14일 일요일

Deep Learning with Sequence Data and text (순차적 데이터와 텍스트의 딥러닝 PyTorch) (9)


Loading the embeddings in the model

앞에서 TEXT.vocab.vectors인 vectors변수는 미리 훈련된 embeddings를 포함하는 vocab_size(어휘 또는 단어장 크기) * dimensions(차원) 형태의 torch텐서를 리턴합니다.
우리는 embedding layer의 가중치(weights)값에 embeddings 를 저장 해야 합니다. 다음 코드와 같이 embedding layer의 weights값을 접근해서 embedding의 weights값에 지정 할 수 있습니다.

model.embedding.weight.data = TEXT.vocab.vectors

참고로 TEXT.vocab.vectors 이 값은 앞에서 다운로딩한 값이 들어 있습니다.
model은 우리 네트워크의 객체를 표현합니다. 그리고 embedding는 embedding layer를 표현합니다. embedding layer에서 새로운 차원을 이용중이기 때문에 embedding layer뒤에 오는 (linear layer)선형 layer에 대한 입력에 작은 변화가 있습니다. 다음 코드는 새로운 구조를 가지고 있고 구조는 이전에 우리가 embeddings 훈련 했을때 사용된 구조와 비슷합니다.

class EmbNet(nn.Module):
    def __init__(self,emb_size,hidden_size1,hidden_size2=400):
        super().__init__()
        self.embedding = nn.Embedding(emb_size,hidden_size1)
        self.fc1 = nn.Linear(hidden_size2,3)

        
    def forward(self,x):
        embeds = self.embedding(x).view(x.size(0),-1)
        out = self.fc1(embeds)
        return F.log_softmax(out,dim=-1)

model = EmbNet(len(TEXT.vocab.stoi),300,12000)

embeddings가 로드되면 training동안 embedding weights를 변경하지 않는것을 보장 해야합니다. 어떻게 그것을 하는지 다음장에서 논의 할 것입니다.
















댓글 없음:

댓글 쓰기