def one_hot_embedding(labels, num_classes):
    """Embedding labels to one-hot form.

    Args:
      labels: (LongTensor) class labels, sized [N,].
      num_classes: (int) number of classes.

    Returns:
      (tensor) encoded labels, sized [N, #classes].
    """
    y = torch.eye(num_classes) 
    return y[labels]

출처 : https://discuss.pytorch.org/t/convert-int-into-one-hot-format/507/25

1
2
3
4
5
6
import os
 
path = "/mypath"
 
if not(os.path.isdir(path)) :
    os.makedirs(os.path.join(path))
cs


os.path.isdir은 해당 경로에 폴더가 있는 지 확인하는 함수이고

os.makedirs는 해당 경로를 생성하는 함수이며

os.path.join은 args를 합쳐 하나의 경로로 생성하는 함수이다.


참고로, os.path.isdir은 해당 경로에 '폴더'만 있는 지 확인한다.

만약 폴더가 아니라 파일이 있는지 확인하고자 한다면, os.path.exists나 os.path.isfile를 사용한다.

'Programming > Python' 카테고리의 다른 글

[Python] '01', '001', '0001', ... 등으로 저장하는 법  (0) 2018.12.01
1. 함수 사용법

아래와 같은 포멧을 사용하면 된다.
이 때, a는 보통 integer형을 입력한다.

1
'{0:02}'.format(a)
cs


여기서, 0:02의 2는 String형의 결과값의 길이를 뜻하고, 결과는 String형으로 출력된다.

아래는 기본적인 예시이다.


1
2
3
4
5
6
a = 1
'{0:02}'.format(a) = '01'
b = 3
'{0:03}'.format(b) = '003'
c = 4
'{0:04}'.format(c) = '0003'
cs


2. 사용처

주 사용처Training Dataset을 저장 및 불러오기할 때 사용한다.

인터넷에 배포되고 있는 Dataset들은 0001.png, 0002.png ... 이런 식으로 저장되어 있는 경우가 많고,

이 경우 데이터들을 for문을 통해 쉽게 불러올 수 있다.


반대로, 내가 데이터셋을 생성하는 경우에도 같은 형식으로 만드는 것이 유리한데,

그 이유는 Data Parsing하기가 쉬워지기 때문이다.

파일명이나 경로명이 어떤 정보를 가지고 있는 경우, 경로에 포함된 정보들로 Data Parsing을 할 수 있고,

이 때 경로의 길이는 고정되어 있는 게 편하다.

(Data Parsing : 원본 데이터를 원하는 기준으로 나눠서 저장하는 것)


간단한 예시를 들면

/home/male/M0135.png 와 /home/female/F1234.png라는 데이터셋이 있다고 생각하자.

M은 남자, F는 여자라는 정보를 가지고 있다.

이제, 성별을 기준으로 나누고 싶어 'M'과 'F'에 접근하려면 path[len(path)-9]으로 접근할 수 있다.


하지만, 0을 채우지 않은 경우는 경로가 /home/male/M135.png 와 /home/female/F1234.png가 될 것이다.

이 경우, M과 F가 같은 위치에 오지 않으므로, 데이터를 기계적으로 다루기가 어려워진다.


결론은 주로 파일의 경로명 설정에 사용된다는 것이다.

물론, 다른 용도로도 많이 사용될 것이다.


-----------------------------------------------------------------------------------------------


여담으로, input을 integer가 아니라 다른 형을 넣으면 어떨까 궁금해서 다양하게 실험해봤다.

1
2
3
4
5
6
a = -1
'{0:05}'.format(a) = '-0001'
b = 'abc'
'{0:05}'.format(b) --> error
c = 1.53
'{0:05}'.format(c) = '01.53'
cs


결론은, 마이너스 부호나 소수점을 하나의 character로 보고 고정된 길이의 결과를 출력한다.

혹시 문자열도 되나 싶어서 해봤는데 역시나 안된다.

코드에 적진 않았지만 배열 입력도 안된다.


'Programming > Python' 카테고리의 다른 글

[Python]경로 상에 폴더 생성하기  (0) 2018.12.11

+ Recent posts