Few-shot learning: 훈련데이터의 수가 매우 제한적인 상황에서 AI모델을 개발하려는 기술 또는 알고리즘들을 의미함. 이 Few-shot learning은 상대적으로 적은 훈련데이터에서도 새로 입력값으로 주어지는 데이터(unseen data)을 잘 인식하고 분류하고자하는 노력하는 것임. 전통적인 AI의 트렌드와같이 매우 많은 데이터로, ML 모델을 구축하는것이 목표가아닌, 적은데이터에서 ML 모델을 구축하자는것이 핵심.

Few-shot 접근법

데이터 레벨 접근법

파라미터 레벨 접근법

- 메타러닝

- 메타러닝의 아류 

메트릭 러닝

 

 

Reference: www.unite.ai/few-shot-learning/

반응형

a @ b: PEP465에서 권장(matrix multiplication). 

np.dot(a, b): numpy에서 사용을 권장하지 않음.

np.matmul: Matrix multiplication 

다 내적

e.g) shape (3, 2) x shape (2, 4) => (3, 4)

 

A * B: 

element wise multiplication 와 matrix multiplication 둘다 지원함

multiplication

matrix인 경우와 arrayt인 경우 다름

 

blog.finxter.com/numpy-matmul-operator/

 

반응형

CentOS

$sudo yum update
$sudo yum install python3-dev python3-pip  # Python 3
$sudo pip install --user --upgrade virtualenv

 

가상환경 생성하고 활성화 하기

$  python3 -m virtualenv venv   # 가상환경 폴더가 생성된것을 확인할 수 있다.

$ source "venv/bin/activate"  # 가상환경 활성화

(venv) $ deactivate  # 가상환경 비활성화

 

주피터 노트북 커널에 가상환경 추가하기

(venv) $ pip install ipykernel

$ python -m ipykernel install --user --name "만든폴더명" --display-name "디스플레이커널명"

패키지 설치는 주피터노트북에서 설치하기보다, 가상환경 돌리는 터미널에서 미리 설치하고 돌아와야 PATH문제가 없다

(venv) $ pip install [package_name]

반응형

파이참을 이용해서 함수를 코딩할 때, 신경쓰는 부분이 docstring이다.

그런데, docstring이 pandas, 또는 numpy 에 익숙한데, 다른 포맷으로 디폴트로 세팅되어있어서 변경하는 법을 작성하고자한다.

 

창: Help - Find Action - Docstring format 

Docstrings-Docstring format 으로 원하는 스타일로 변경하면 된다.

 

반응형

Driver/library version mismatch:


2.1 CUDA가 사용한 GPU인지 파악

$ lspci | grep -i nvidia


2.2 시스템정보파악

$ uname -m && cat /etc/*release

x84_64 인지 아닌지 알아야하고, OS버전이 무엇인지 확인한다. 필자는 CentOS7, x84_64 bit이다.


2.3 시스템이 gccc가 설치되어있는지 확인.

gcc: CDUA Toolkit을 사용하기위한 컴파일러

$ gcc --version

gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)

Copyright (C) 2015 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


2.4 커널 헤더 와 패키지 버전 확인

$ uname -r

3.10.0-1127.13.1.el7.x86_64 


2.5 선택방법: 배보판특정패키지distribution-specific packages (PRM, Deb 패키지)와 배포판독립(Distribution-independent package(runfile))이 둘다사용하다. 배보판 특정 패키지는 패키지 관리자인 yum, apt 등에 종속되서 딸려있는 패키지들을 이용하는거라 손쉬웁게 설치가가능하고, 배보판독립은 리눅스 배보판에든지 설치가 가능하다. Nvidia에서는 배보판 특정 패키지의 사용을 권장한다.


반응형

hashable object란 무엇인가?

python의 hashable object은 hash함수에 인자로 들어갈 수 있는 객체들을 의미한다. hashable에 대한 정의로 또 hash라는 단어가 들어갔다. 그럼 이번에 hash라는 것이 무엇인지 알아보면 될 것이다.


hash(object): object의 저장된 내용을 기준으로 한 개의 정수를 생성하여 반환하는 함수

- 이 함수는 hasher라고도 부른다. hash 함수안에 인자로 들어가는 object은 하나의 값일 수도 있고, 여러 개의 값을 갖고 있는 컨테이너 일 수도 있다. 즉, 내용이 뭐든지간에(사실, 조건이 없진 않다..), 이에 해당하는 숫자 하나를 무조건 생성한다고 생각하면 된다.  아래의 예시처럼, string이 무엇이든 간에 hash function을 통과하고나면 무조건 하나의 숫자로 반환되는 함수를 의미한다. 이는 튜플일 수도 있는데 (1, 2, 3) 을 hash function에 넣어, 2366528764324이 나왔다고 하면, 이 튜플은 hashable object 라고 부른다.




image resource: https://medium.com/better-programming/3-essential-questions-about-hashable-in-python-33e981042bcb


hashable은 왜 필요할까?

비교를 위해 사용된다. 즉, hash을 하고나면, 각 객체가 숫자로 나오기 때문에, 같은 객체인지 다른객체인지 비교가 가능하다. 같은 숫자면 같은 객체로 인식한다. 또한, 컨테이너인 객체들도, hash을 이용하면 한번에 비교가 가능하다. 가령 (a, b, c)인 객체와 (d, b, c)인 객체를 비교할 대도, 각각의 원소들이 같은지 여러번 비교를 하는 것이 아니라, hash 값만 있으면 비교가 가능하므로, 한 번의 비교 연산만이 필요하다. 즉, 1) Computationally robust함을 유지하기 하기위해 사용된다 (쉽게 말하면, 다른 객체는 다른 해시함수를 갖어야한다). 다른 객체들이 같은 해시를 가지면 충돌이 일어날 수 있다. 2) 같은 오브젝트가 일관성 있게, 같은 값을 가질 수 있도록 표식한다. 


모든 오브젝트는 hashable할까?

리스트라든가 셋, 딕셔너리와 같이 데이터 변경이 가능한 컨테이너은 hashable하지 않다. 이유는 데이터가 변경가능한(immutable)한 객체들은 해시를 만들어놓고도, 중간에 데이터가 변경되면 해쉬값도 매번 변경되어야되기 때문에, 이런경우 type error가 발생한다. 즉, Numeric, immutable container은 hashable이다. 

생각해보면, 숫자(int, bool, float)은 그 자체로 숫자이기 때문에, 숫자 중간을 바꿀 수 없고, 변경불가능한 컨테이너(immutable container)은 tuple, string, bytes, forzenset도 변경이 불가능하기 때문에 hashable하다. 또한, numeric 들은 int이든 bool이든 float은 타입이 다르더라도 비교해서 동등을 알 수 있다. 아래의 예시를보면 1이든 True (bool type) 이든 hash값이 동일해서, 동등비교를해도 True인 것을 알 수 있다.

이를 이용하는 경우, 중복여부를 빠르게 판단할 수 있는데, 중복이 없어야하는 dict, set의 item을 비교할 때 사용될 수 있다. 따라서, set과 dict의 key값들은 중복이 되면 안되기에, hashable해야한다.



반응형

+ Recent posts