hugginface의 여러 모델들을 사용하다보면 vocab_size가 달라 임베딩 차원이 안맞는 경우가 생긴다. 이때 임베딩 차원을 추가하면 문제를 해결할 수 있다. 1. Embedding 추가하기 torch.nn.Embedding 모델에 새로운 아이템들을 더할 수 있는 방법은 아래와 같다. vocab_size = 10 emb_dim = 128 # 기존에 학습 완료된 임베딩 original_emb = torch.nn.Embedding(vocab_size, emb_dim) # 추가하거나 새로 학습하고자 하는 vocab의 임베딩 new_vocab_size = 2 to_add_emb = torch.nn.Embedding(new_vocab_size, emb_dim) # 각 임베딩의 parameter를 합쳐 임베..
1. torch.cat() torch.cat() 기능 정의는 다음과 같다. Concatenates the given sequence of seq tensors in the given dimension. All tensors must either have the same shape (except in the concatenating dimension) 기준 차원에 대해 두 텐서의 요소를 연결하며(list의 extend), 기준 차원을 제외한 shape은 동일해야 한다. import torch t1 = torch.rand((6, 32)) t2 = torch.rand((4, 32)) torch.cat((t1, t2), dim=0).shape >>>> torch.Size([10, 32]) torch.cat((t..
torch.reshape()에 대해 궁금했던 부분들을 정리하고자 한다. Emil Bogomolov의 글을 참고하였다. 1. n-차원 텐서는 메모리 공간에서 어떻게 존재하는가?(Contiguous) 다수의 데이터에 접근할 때 데이터가 가까운 메모리 공간에 모여있으면 읽는 효율이 좋아진다. 때문에 배열 데이터도 연속된 공간안에 위치시키는게 좋다. 다차원 공간에서 배열 데이터를 저장하는 방법은 크게 row-major order와 column-major order가 있다(위키). C계열 언어는 row-major order를 따르며 이는 같은 행(row)에 데이터들이 연속된 메모리 공간에 위치해있는 것을 의미한다. PyTorch도 row-major order로 다차원 데이터를 저장하는데 이를 contiguous라..
tensorflow 2.0 버전부터 model, layer subclassing을 지원한다. 이때 custom model을 학습 후 저장할 때 model.save()를 사용하면 아래와 같은 에러 문구가 뜨는 경우가 발생하는 경우가 있다. >>> ValueError: Model cannot be saved because the input shapes have not been set. Usually, input shapes are automatically determined from calling .fit() or .predict(). To manually set the shapes, call model._set_inputs(inputs). 이 경우 model.save_weights()를 사용하면 해결이 된..
nn.Linear()등으로 정의한 파라미터 접근은 parameters(), named_parameterss()으로 가능하다. 정확히는 layer가 모두 nn.Module()을 상속받으므로 Module에 정의되어 있는 parameter 접근 방법을 사용하면 된다. 1. torch.nn.Module.parameters() parameters()는 layer 이름을 제외한 parameter값에 대한 iterator를 준다. layer = torch.nn.Linear(10,3) layer >> Linear(in_features=10, out_features=3, bias=True) for p in layer.parameters(): print(p) >> Parameter containing: tensor([[-..