no image
[Hugging face] datasets 라이브러리로 dataset과 metric 불러오기
이번 포스팅에서는 Huggingface hub에서 제공하는 dataset의 목록과 dataset을 불러오는 방법에 대해 알려드리겠습니다. * 모든 코드는 Jupyter Notebook 환경에서 실행했습니다. datasets 라이브러리 설치 # Hugging face에서 제공하는 datasets 라이브러리 설치 !pip install datasets dataset 불러오기 datasets 개수 확인(24.01.03 기준) import datasets print(len(datasets.list_datasets())) # 91305 datasets load 방법(emotions) from datasets import load_dataset emotions = load_dataset("emotion") 현재 e..
2024.01.03
no image
[PyTorch] RuntimeError: The NVIDIA driver on your system is too old. 오류 해결법
오늘은 GPU 버전 오류에 대해 포스팅을 하려고 합니다. 최근에 GPU를 이용해서 인공지능 모델을 학습시키려고 하는데 다음과 같은 오류가 발생했습니다. RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with you..
2023.12.31
no image
[PyTorch] torch.ne, torch.eq 에 대해 알아보자
참고링크 : https://pytorch.org/docs/stable/generated/torch.ne.html torch.neimport torchtorch.ne(input, other,*, out=None)# tensor을 반환한다. Parameter:input(tensor) - 비교할 텐서other(Tensor or float) - 비교할 텐서 또는 값Keyword Arguments:out(Tensor, optional) - 반환 텐서Returns:input과 output이 같으면 False, 다르면 True를 반환한다. Example:>>> import torch>>> torch.ne(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))..
2023.09.13
no image
[Pytorch] torch.multinomial, multinomial
torch.multinomial multinomial 함수는 텐서안에 있는 값들을 통해 무작위로 샘플링을 수행합니다. 텐서를 반환하며, 각 행은 텐서 입력의 해당 행에 위치한 다항 확률 분포(input_tensor)로부터 추출된 num_samples 개의 인덱스를 포함합니다. 입력의 행들은 합이 반드시 1이 될 필요는 없습니다.( 이 경우에는 값을 가중치로 사용) 그러나 음수가 아니어야 하며, 유한해야 하고, 합이 0이 아니어야 합니다. 함수 선언 import torch torch.multinomial(input, num_samples, replacement=False, *, generator=None, out=None) → LongTensor 파라미터 input(Tensor) - 확률을 포함한 Tens..
2023.09.07
no image
[Pytorch] numpy to tensor, tensor to numpy, 넘파이와 텐서 변환
numpy 에서 tensor로 변환하는 방법에 대해 알아보겠습니다. 데이터를 tensor을 생성하는 방법은 2가지가 있습니다. tensor을 생성하거나 numpy 배열을 tensor로 바꾸는 것이 있습니다. 왜 tensor을 사용하는가? 1. 대부분의 딥 러닝 framework( TensorFlow, Pytorch) 에서는 Tensor을 기본 데이터 구조로 사용하기 때문입니다. 2. tensor은 자동으로 미분을 해주며 역전파 계산을 해줍니다. 3. Tensorflow와 Pytorch 같은 딥 러닝 framework는 GPU를 활용해 더욱 빠른 연산을 할 수 있습니다. 데이터를 tensor로 만들거나 numpy 배열을 tensor 로 변환합니다. 4. 고차원의 배열을 numpy보다 tensor가 효과적으..
2023.09.06
728x90

이번 포스팅에서는 Huggingface hub에서 제공하는 dataset의 목록과 dataset을 불러오는 방법에 대해 알려드리겠습니다.

* 모든 코드는 Jupyter Notebook 환경에서 실행했습니다.

 

datasets 라이브러리 설치

# Hugging face에서 제공하는 datasets 라이브러리 설치
!pip install datasets

 

dataset 불러오기


datasets 개수 확인(24.01.03 기준)

import datasets

print(len(datasets.list_datasets()))
# 91305

 

datasets load 방법(emotions)

from datasets import load_dataset

emotions = load_dataset("emotion")

데이터 다운로드와 dataset 정보

현재 emotions 안에 train, validation, test 데이터가 각각 16000, 2000, 2000개가 있는 것을 확인할 수 있습니다. 또한, 요소로는 text와 label이 있는 것을 볼 수 있습니다.

그림으로 표현하면 다음과 같습니다. 

emotions 내부에 train(16000), validation(2000), test(2000)개의 데이터가 존재

train 내부는 그림과 같습니다.

train 내부에 dict로 되어있는 text와 label로 이루어진 데이터가 16,000개가 있음

 

 

metrics 불러오기


metrics :자연어 처리에서 모델의 성능을 평가하기 위해 사용되는 수치. 여러 종류의 metrics가 존재하며 각각은 특정 목적에 맞게 설계

  • BLEU Score : 모델의 번역 품질을 평가
  • ROUGE Score : 모델의 요약 성능을 평가

위와 같은 다양한 metrics가 있으며 불러오는 방법에 대해 설명하겠습니다.

 

metrics의 목록을 확인

import datasets

print(datasets.list_metrics())

# Output
['accuracy',
 'bertscore',
 'bleu',
 'bleurt',
 'brier_score',
 'cer',
...
]

 

metics 중 가장 간단한 accuracy를 사용

from datasets import load_metric

# Accuracy 메트릭 로드
accuracy_metric = load_metric('accuracy')

# 예측된 값과 참조 값
predictions = [0, 1, 1, 0, 1]  # 예측된 레이블 예시
references = [0, 1, 0, 0, 1]  # 실제 레이블 예시

# Accuracy 스코어 계산
results = accuracy_metric.compute(predictions=predictions, references=references)
print(results["accuracy"])

# Output
# 0.8

 

metrics 중 bleu사용

from datasets import load_metric

# BLEU 메트릭 로드
bleu_metric = load_metric('bleu')

# 예측된 번역과 참조 번역
predictions = [["the", "cat", "is", "on", "the", "mat"]]
references = [[["the", "cat", "is", "on", "the", "mat"]]]

# BLEU 스코어 계산
results = bleu_metric.compute(predictions=predictions, references=references)
print(results["bleu"])

# Output : 1.0

 

Hugging face의 dataset과 metrics의 목록과 사용법에 대해 알아봤습니다. 다음엔 모델에 사용하는 방법에 대해 알아보겠습니다.

 

출처 : https://huggingface.co/docs/datasets/index

728x90
728x90

오늘은 GPU 버전 오류에 대해 포스팅을 하려고 합니다.

최근에 GPU를 이용해서 인공지능 모델을 학습시키려고 하는데 다음과 같은 오류가 발생했습니다.

 
RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.
 
 
왜 발생하는가?

NVIDIA driver의 버전이 오래됨

버전확인하는 방법

$ nvidia-smi

위의 코드를 입력하면 우상단에 CUDA Version 확인

다음과 같이 CUDA Version을 확인할 수 있습니다.

해결하는 방법은?

해결하는 방법은 2가지입니다.

  • NVIDIA driver 최신 버전 설치
  • PyTorch 최신 버전 또는 GPU에 맞는 버전 설치

그 중에서 PyTorch 설치 방법에 대해 소개해드리려고 합니다.

첫 번째  PyTorch 홈페이지에 접속한다.

https://pytorch.org/get-started/previous-versions/

 

Previous PyTorch Versions

Installing previous versions of PyTorch

pytorch.org

 

두 번째, 자신의 OS와 이전 CUDA버전보다 최신 버전의 CUDA를 찾습니다.

저는 Linux를 사용하며 이전 버전이 11.4였기 때문에 11.7 버전을 설치할겁니다.

$ pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117

 

 

3. 코드 입력

사진과 같이 Jupyter Notebook에 실행하고 커널을 재시작합니다.

 

그럼 정상적으로 오류를 출력하지 않고 작동합니다.

728x90
728x90

참고링크 : https://pytorch.org/docs/stable/generated/torch.ne.html

 

torch.ne

import torch

torch.ne(input, other,*, out=None)

# tensor을 반환한다.

 

Parameter:

  • input(tensor) - 비교할 텐서
  • other(Tensor or float) - 비교할 텐서 또는 값

Keyword Arguments:

  • out(Tensor, optional) - 반환 텐서

Returns:

  • input과 output이 같으면 False, 다르면 True를 반환한다.

 

Example:

>>> import torch
>>> torch.ne(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
tensor([[False, True], [True, False]])

torch.eq

 

참고링크 : https://pytorch.org/docs/stable/generated/torch.ne.html

 

import torch

torch.eq(input, other,*, out=None)

# tensor을 반환한다.

 

Parameter:

  • input(tensor) - 비교할 텐서
  • other(Tensor or float) - 비교할 텐서 또는 값

Keyword Arguments:

  • out(Tensor, optional) - 반환 텐서

Returns:

  • input과 output이 같으면 True, 다르면 False를 반환한다.

 

왜 사용하는가

저 같은 경우는 Sequen 모델에서 가변 길이 Sequence를 처리할 때 사용을 했습니다.

torch.ne -> Mask Index인 경우 같으면 False로 바꾸어 유효한 데이터만 True로 반환되도록 함수를 사용했습니다.

torch.eq -> 유효한 데이터 중에서 값이 똑같은 Index들은 정답을 맞췄기에 True로 반환되도록 하여 정확도 계산에 사용되도록 했습니다.

두 함수는 필요없는 데이터와 필요있는 데이터를 구분하고 필요한 데이터 중에서 올바른 데이터만 계산하는 accuracy를 구할 때 사용했습니다.

728x90
728x90

torch.multinomial

multinomial 함수는 텐서안에 있는 값들을 통해 무작위로 샘플링을 수행합니다. 

텐서를 반환하며, 각 행은 텐서 입력의 해당 행에 위치한 다항 확률 분포(input_tensor)로부터 추출된 num_samples 개의 인덱스를 포함합니다.

 

입력의 행들은 합이 반드시 1이 될 필요는 없습니다.( 이 경우에는 값을 가중치로 사용) 그러나 음수가 아니어야 하며, 유한해야 하고, 합이 0이 아니어야 합니다.

 

함수 선언

import torch
torch.multinomial(input, num_samples, replacement=False, *, generator=None, out=None) → LongTensor

파라미터

  • input(Tensor) - 확률을 포함한 Tensor ( 꼭 합이 1일 필요가 없으며, 모든 요소가 0 이상의 정수이며 합이 0이상)
  • num_samples(int) - 각 행에서 뽑을 sample 의 갯수
  • replacement(bool, optional) - 복원 추출에 대한 여부입니다.(추출하고서 없앨 것인지 아닌지)

 

함수 사용하는 방법

import torch
probs = torch.tensor([[0.1, 0.2, 0.3, 0.4, 0.0]], dtype=torch.float)

# 각 행에서 3개의 샘플을 추출
samples = torch.multinomial(probs, num_samples=3)

print(samples)

# Output
# tensor([[1, 2, 3]])

 * 확률 높은 것으로 뽑는 것이 아닌 확률을 통해서 인덱스를 랜덤하게 뽑습니다.

확률이 0인 4번째 index는 한번도 나오지 않는 것을 알 수 있습니다.

 

replcement = True

import torch
probs = torch.tensor([[0.1, 0.2, 0.3, 0.4, 0.0]], dtype=torch.float)

samples = torch.multinomial(probs, num_samples=3,replacement=True)

print(samples)

# Output
# tensor([[2, 2, 1]])

뽑은 index가 또 뽑힐 수 있습니다.

 

함수가 오류날 경우

import torch
# tensor 안에 inf, nan, 0보다 이하 요소가 포함될 경우
# RuntimeError 발생
probs = torch.tensor([[-0.1, 0.2, 0.3, 0.4, 0.0]], dtype=torch.float)


samples = torch.multinomial(probs, num_samples=3)

print(samples)

# Output
# RuntimeError: probability tensor contains either `inf`, `nan` or element < 0

 

728x90
728x90

 

numpy 에서 tensor로 변환하는 방법에 대해 알아보겠습니다. 데이터를 tensor을 생성하는 방법은 2가지가 있습니다. tensor을 생성하거나 numpy 배열을 tensor로 바꾸는 것이 있습니다. 

 

왜 tensor을 사용하는가?

1. 대부분의 딥 러닝 framework( TensorFlow, Pytorch) 에서는 Tensor을 기본 데이터 구조로 사용하기 때문입니다.

2. tensor은 자동으로 미분을 해주며 역전파 계산을 해줍니다. 

3. Tensorflow와 Pytorch 같은 딥 러닝 framework는 GPU를 활용해 더욱 빠른 연산을 할 수 있습니다. 데이터를 tensor로 만들거나 numpy 배열을 tensor 로 변환합니다.

4. 고차원의 배열을 numpy보다 tensor가 효과적으로 처리할 수 있기에 사용합니다.

 

Tensor 생성

torch.Tensor( )

tensor을 반환합니다.

import torch
tf = torch.Tensor([1,2])
print(tf)

# Output
# tensor([1., 2.])

 

Numpy to Tensor

torch.from_numpy( )

numpy를 tensor로 변환한 뒤 반환합니다.

import torch
import numpy as np

a=np.array([1,2,3,4])
b=torch.from_numpy(a)
print(b)

# Output
# tensor([1, 2, 3, 4])

 

Tensor to Numpy

numpy( )

tensor을 numpy로 변환한 뒤 반환합니다.

import torch
import numpy as np


a = torch.rand(3,3)
b = a.numpy()

print(b)

# [[0.229119   0.00697333 0.46128327]
#  [0.92042404 0.55823183 0.16318232]
#  [0.16195619 0.35052514 0.5872609 ]]
728x90