반응형
파이토치 텐서 데이터 셔플¶
데이터 셔플 과정¶
torch.rand
를 활용한 샘플데이터 생성합니다.
randperm
메서드를 활용하여 무작위 순위 리스트를 만들어냅니다.- 무작위 순위 리스트란 ? 순위 리스트
[0, 1, 2, 3]
vs 무작위 순위 리스트[2, 1, 4, 0]
- 무작위 순위 리스트란 ? 순위 리스트
index_select
메서드를 활용하여 무작위 숫자 리스트에 맞게 텐서 내 값 위치 변경합니다.
In [1]:
# 예시 입력
import torch
x = torch.rand(4,5)
x
Out[1]:
tensor([[0.5017, 0.6225, 0.8976, 0.1194, 0.0085], [0.3317, 0.7673, 0.0814, 0.5546, 0.5811], [0.1697, 0.6363, 0.1774, 0.6370, 0.1944], [0.8212, 0.8176, 0.1641, 0.1151, 0.9785]])
In [2]:
# 예시 라벨 데이터 생성
y = torch.rand(4,1)
y
Out[2]:
tensor([[0.7799], [0.8582], [0.2726], [0.3184]])
In [3]:
# 무작위 순위 리스트 크기 설정
list_size = x.size(0)
list_size
Out[3]:
4
In [4]:
# randperm함수를 활용하여 인덱스(데이터 순서) 셔플
indices = torch.randperm(list_size)
indices
Out[4]:
tensor([1, 2, 3, 0])
In [5]:
# indices 지시에 따른 데이터 순서 변경
x_ = torch.index_select(x, dim=0, index=indices)
x_
Out[5]:
tensor([[0.3317, 0.7673, 0.0814, 0.5546, 0.5811], [0.1697, 0.6363, 0.1774, 0.6370, 0.1944], [0.8212, 0.8176, 0.1641, 0.1151, 0.9785], [0.5017, 0.6225, 0.8976, 0.1194, 0.0085]])
In [6]:
y_ = torch.index_select(y, dim=0, index=indices)
y_
Out[6]:
tensor([[0.8582], [0.2726], [0.3184], [0.7799]])
참고¶
- torch.index_select(tensor, dim=dimension, index=index)
- dimension : 추출 대상 차원 설정
- index : 인덱싱 내용
In [7]:
# 예시 텐서 생성
tensor = torch.tensor([[1],
[2],
[3]])
In [8]:
# 0 차원 0,2번째 위치 인덱싱
indices = torch.tensor([0,2])
torch.index_select(tensor, dim=0, index=indices)
Out[8]:
tensor([[1], [3]])
In [9]:
# 0 차원 1번째 위치 인덱싱
indices = torch.tensor([1])
torch.index_select(tensor, dim=0, index=indices)
Out[9]:
tensor([[2]])
In [10]:
# 예시 텐서 생성
tensor = torch.tensor([[1, 10],
[2, 11],
[3, 12]])
In [11]:
# 1 차원 1번째 위치 인덱싱
indices = torch.tensor([1])
torch.index_select(tensor, dim=1, index=indices)
Out[11]:
tensor([[10], [11], [12]])
In [12]:
# 1 차원 내 위치가 없는 3을 indices로 지정함녀 erroe 리턴
indices = torch.tensor([3])
torch.index_select(tensor, dim=1, index=indices)
--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) /tmp/ipykernel_846378/1854948782.py in <module> 1 # 1 차원 내 위치가 없는 3을 indices로 지정함녀 erroe 리턴 2 indices = torch.tensor([3]) ----> 3 torch.index_select(tensor, dim=1, index=indices) RuntimeError: INDICES element is out of DATA bounds, id=3 axis_dim=2
반응형
'python' 카테고리의 다른 글
파이썬 이미지 변수를 원격서버에 저장하기 (0) | 2023.08.13 |
---|---|
넘파이 2차행렬 행렬식(determinant) 연산 (0) | 2023.08.12 |
넘파이 영벡터, 일벡터 생성 (0) | 2023.08.10 |
넘파이 조건에 맞는 값의 위치 반환 (0) | 2023.08.10 |
파이썬 이미지 반점 제거 (0) | 2023.08.10 |
댓글