Python 78

[Pytorch] RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling

CUBLAS_STATUS_NOT_INITIALIZED 에러는 nn.Embedding에 원래 값보다 큰 값이 들어갔을 때 발생하는 에러다. 예를 들어, 사용자의 수는 100명이고, 제품의 수는 50개라고 하자. 그렇다면 아래와 같은 코드로 nn.Embedding을 생성할 수 있을 것이다. class Model(nn.Mudule): def __init__(self, num_users, num_items, latent_dim): self.num_users = num_users self.num_items = num_items self.latent_dim = latent_dim self.user_embedding = nn.Embedding(self.num_users, self.latent_dim) self.ite..

Python/Pytorch 2022.12.05

[Transformers] Bert Tokenizer 알아보기

Contents Transformers 패키지는 자연어처리(NLP) 분야에서 엄청 많이 사용되는 패키지 중 하나이다. BERT 등과 같은 모델을 구축할 때 Transformers 패키지를 사용하면 매우 편하게 구축할 수 있다. 이번 글에서는 Transformers에 존재하는 BERT에서 사용하는 tokenizer 함수를 뜯어본다. BertTokenizer BertTokenizer는 PreTrainedTokenizer를 상속받는다. PreTranedTokenizer는 나중에 알아보도록하고, 단순히 사전 학습된 tokenizer 정도로 이해하면 된다. BertTokenizer 내에는 vocab_file, do_lower_case, unk_token 등 다양한 파라미터들이 존재하는데, 중요한 파라미터 위주로 ..

Python/Transformers 2022.12.04

[Pytorch] BERT로 감성 분석하기. 기초 설명까지

Contents BERT(Bidirectional Encoder Representation from Transformers)는 Transformer를 기반으로 양방향 학습을 하는 사전학습 모델이다. 사전학습 모델이란 미리 사전에 많은 양의 코퍼스를 학습하고, 그 후 파인튜닝(Fine-tuning)을 통해 본인이 사용하고자 하는 도메인에 적용하는 모델이다. Transformer가 나오기 이전에도 Bi-LSTM 등과 같이 양방향 학습 모델이 존재했지만, 사전 학습 모델은 아니었으며, BERT는 Self-supervised Learning 중 하나인 Making 기법을 사용하여 학습의 성능을 향상시키고, 지금까지도 많이 사용된다. 이번 글에서는 BERT를 사용하는 방법에 대해서 알아보고, 각 코드가 어떤 의미..

Python/Pytorch 2022.12.03

[Pandas] set_categories 사용하기.

추천 시스템을 구축할 때 데이터를 학습 데이터와 검증 데이터 그리고 테스트 데이터로 분할하여 사용한다. 이때 학습 데이터는 모델을 학습하기 위한 용도로 사용하고 검증 데이터는 모델의 하이퍼 파라미터를 최적화하기 위해 사용한다. 마지막으로 테스트 데이터는 최종 모델의 성능을 확인하는 용도로 사용한다. 추천 시스템을 구축할 때 만약 검증 데이터와 테스트 데이터에는 존재하지만 학습 데이터에는 존재하지 않는 사용자의 경우 학습한 데이터가 없기 때문에 실제 사용자에게 제품을 추천할 수 없게 된다. 따라서, 학습 데이터에 존재하는 사용자를 기반으로 실험을 진행하는 것이 중요하다. 이때 사용되는 것이 바로 Pandas에 set_categories 함수이다. sample = pd.DataFrame({'user_id':..

Python/Pandas 2022.12.03

[Pytorch] Learning Rate Scheduler 사용하기

Contents 학습률(Learning Rate)은 모델을 학습하기 위해서 필수적인 요소다. 학습률을 너무 크게 설정한다면, 최솟값에 도달하는 것이 어려우며, 너무 작게 설정하면, local minimum에 빠지거나 학습에 진전이 없을 수 있다. 이번 글에서는 학습률에 Schedular를 설정해서 학습률을 감쇠(Decay)하는 패키지를 다루어볼 것이다. Import Packages import torch import torch.nn as nn from torch.optim.lr_scheduler import StepLR import torch.optim as optim from torch.utils.data import DataLoader import torchvision.transforms as tra..

Python/Pytorch 2022.11.17

[Pytorch] BCELoss, BCEWithLogitsLoss, CrossEntropyLoss

Contents PyTorch 에서는 이진 분류(Binary Classification)를 할 때 목적 함수 혹은 손실 함수로 사용할 수 있는 BCELoss와 BCEWithLogitLoss 가 존재한다. 두 함수는 모두 모델이 예측한 값과 실제 값 간의 차이를 비교하는 함수지만, 조금 다른 방식으로 계산된다. 두 함수의 차이점에 대해서 알아보자. BCELoss BCELoss는 모델의 구조 상에 마지막 Layer가 Sigmoid 혹은 Softmax로 되어 있는 경우 이를 사용한다. 즉, 모델의 출력이 각 라벨에 대한 확률값으로 구성되었을 때 사용이 가능하다. import torch import torch.nn as nn m = nn.Sigmoid() bce_criterion = nn.BCELoss() ta..

Python/Pytorch 2022.09.03

[Algorithm] sort()와 sorted()의 차이점

Contents 파이썬에서 리스트(List)를 정렬할 때 주로 사용하는 함수는 sort()와 sorted()가 있다. 두 개의 함수는 둘 다 정렬을 할 때 사용하지만 조금씩 사용하는 방법의 차이가 있다. 두 함수의 차이점에 대해서 알아보자. sorted sorted()의 경우 정렬할 때 쓰는 함수이며, 숫자 뿐만 아니라 문자까지도 정렬이 가능하다. 그러나, 문자를 정렬할 경우 리스트 구조로 반환이 되기 때문에 join 함수를 사용해서 다시 합쳐주어야 한다. a = [2, 5, 1, 9, 7] sorted(a) # [1, 2, 5, 7, 9] b = 'zbdaf' sorted(b) # ['a', 'b', 'd', 'f', 'z'] ''.join(sorted(b)) # 'abdfz' sort sort 함수는..

Python/Algorithm 2022.08.18

[Algorithm] List, Dictionary의 시간 복잡도

Contents 코딩 테스트를 하다보면 시간 복잡도를 고려하지 않아서 발생하는 시간 초과 문제에 직면할 때가 있다. 코딩 테스트에서는 리스트(List) 구조를 많이 사용하는데, 리스트에 사용할 수 있는 함수 혹은 주요 연산들의 시간 복잡도가 어느 정도인지 알아보자. List 연산 시간 복잡도 설명 $\text{len(a)}$ O(1) 전체 요소의 개수를 리턴한다. $\text{a[i]}$ O(1) index $i$의 요소를 가져온다. $\text{a[i:j]}$ O(k) index $i$부터 $j-1$까지의 길이만큼 $k$개 요소를 가져온다. 객체 $k$개에 대한 조회가 필요하기 때문에 O($k$) $\text{element in a}$ O(n) 요소가 존재하는지 확인하는 경우 순차 탐색을 해야하기 때문..

Python/Algorithm 2022.08.18

[Pandas] Pandas에서 tqdm 사용하기

tqdm을 사용할 때는 tqdm.tqdm이나 tqdm.trange를 사용하여 for 문에 적용한다. 그러나 pandas apply를 사용할 때 시간이 오래 걸리지만 tqdm을 사용하기 어렵다. 이 경우 어떻게 할 수 있을까? 이를 지원해주는 것이 바로 tqdm.pandas()이다. import pandas as pd import tqdm.tqdm as tqdm from tqdm import trange tqdm.pandas() with trange(len(x)) as tr: for i in tr: print(x[i]) for i in tqdm(range(10), desc = 'training...'): print(x[i]) dataframe.progress_apply(lambda x: x.split())..

Python 2022.07.06

[Pytorch] torch.Tensor vs torch.tensor

non-data torch.Tensor와 torch.tensor는 같으면서도 다른 역할을 한다. 기본적으로 torch.Tensor는 데이터를 입력하지 않더라도 사용이 가능하지만 torch.tensor의 경우에는 데이터를 무조건 넣어주어야 한다. torch.Tensor() # tensor([]) torch.tensor() # Traceback (most recent call last): # File "", line 1, in # TypeError: tensor() missing 1 required positional arguments: "data" torch.tensor(()) # tensor([]) dimension 추가적으로 가장 중요하다고 생각하는 차이점이 있는데, 아래의 예시를 통해 살펴보자. to..

Python/Pytorch 2022.07.05
반응형