Python/Pytorch 14

[Pytorch] pytorch에서 value count 하는 법

Pandas 내에는 value_count() 라는 함수를 통해 데이터 프레임 내의 값을 카운팅 할 수 있다. Numpy 에서는 collection.Counter 등의 함수를 이용하여 몇 개가 있는지를 확인할 수 있다. Pytorch에서는 bincount라는 함수로 대체할 수 있다. import torch samples = torch.tensor([1, 1, 2, 1, 3, 3, 3], dtype=torch.long) torch.bincount(samples) # tensor([0, 3, 1, 3]) samples.dtype # torch.int64 당연하게도, LongTensor 인 경우에만 가능하다. FloatTensor의 경우 갯수를 확인하는 것이 불가능하기 때문에, LongTensor로 제대로 데이..

Python/Pytorch 2023.06.30

[Pytorch] Neural Graph Collaborative Filtering (NGCF) 구현하기

Contents Neural Graph Collaborative Filtering (NGCF)는 기존의 협업 필터링(Collaborative Filtering)이 고차-연결성(High-Order Connectivity)을 고려하지 못한다는 단점을 극복하고자 그래프를 협업 필터링에 도입 시킨 기법이다. 전통적인 협업 필터링은 user-item interaction만을 고려하게 된다. 대표적인 Neural Collaborative Filtering (NCF)를 생각해보면 사용자 ID와 제품 ID를 내적하거나 연결(Concatenate)하여 사용자의 제품에 대한 구매 확률을 도출한다. 그렇기 때문에 제품과 다른 사용자 간의 관계 즉, 고차-연결성을 고려하지 못한다는 것이다. 예를 들어 $u_1 \leftarr..

Python/Pytorch 2023.01.01

[Pytorch] Transformer 구현하기

Contents Transformer는 자연어 처리(Natural Language Processing, NLP) 분야에서 성능이 우수한 것으로 검증된 대표적인 Self-Attention 모델이다. 기존 Sequential Based 모델인 RNN, LSTM, GRU 등과 같은 모델에 비해 매우 우수한 성능을 보여주고 있으며, BERT, GPT 등의 사전 학습 기반 모델이 Transformer의 골조를 활용하였다. 이번 글에서는 Transformer의 Encoder와 Decoder가 어떻게 구성되어 있는지 짧은 코드를 통해 알아보자. Import Package Transformer는 HuggingFace 에서 지원하는 transformers 패키지와 PyTorch를 이용하여 구현할 것이다. 따라서, 구현에..

Python/Pytorch 2022.12.20

[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

[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

[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

[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

[Error] CUDA-LAUNCH_BLOCKING=1 error

pytorch를 다루다 보면 아래와 같은 에러를 마주칠 때가 있다. 이와 같은 CUDA 에러가 나는 원인은 다양하다. 가장 많이 발생하는 오류 중 하나는 loss 값을 계산할 때 값이 0~255 사이 값이 아니라 음수가 나오거나 하는 형태일 때 발생할 수 있다. 0~1사이로 정규화 하게되면 에러가 해결된다. 이 뿐만 아니라 모델의 메모리가 부족한 경우에도 발생할 수 있으니 이때는 Batch size를 조절하거나 자연어처리인 경우 max length를 조절하는 등의 조치를 취해야 한다.

Python/Pytorch 2022.06.25

[Error] module 'scipy.sparse' has no attribute 'coo_array'

networkx를 사용해서 그래프를 그리려고 하면 module 'scipy.sparse' has no attribute 'coo_array' 이 에러를 마주치는 경우가 발생할 수 있다. 해당 에러가 출력되는 원인은 다양한데 첫 번째로는 scipy의 버전이 다르기 때문이다. 1. scipy == 1.8.0 `coo_array`는 scipy==1.8.0 version에만 존재하기 때문에 먼저 version을 맞춰주자. 2. networkx == 2.7.1 networkx의 version도 맞춰주자 3. pyg-nightly PyG를 upgrade해서 변환해보자. pip install pyg-nightly

Python/Pytorch 2022.06.23
반응형