텐서
텐서 정의와 특징
모델의 입력, 출력 뿐만 아니라 매개 변수 인코딩 가능
Numpy의 ndarrays와 유사
Numpy 배열과 텐서는 기본 메모리를 공유 가능하므로 데이터 복사할 필요성이 없음
- 연산 처리가 편리하지만, 의도치 않게 데이터가 참조가 되는 경우가 발생
Auto Diff에 최적화되어있음
-> x->ㅁ->y^ <=> y 차이를 optim을 통해 학습을 진행하는 것. 차이를 구하고 최적값을 산출하는 파라미터의 메모리 주소가 auto tracing이 된다. 사용자가 일일이 해주지 않아도 됨.
--> 생각하지 못한 곳에서 메모리가 참조되는 경우가 있음.
텐서 생성
직접 생성
데이터(사용자가 인코딩해서 벡터 형식으로 표현)로부터 직접적으로 텐서 생성이 가능함
자료형은 자동으로 유추되어 적용
specific한 자료형이 필요하면 사용자가 정의 가능
data = [[1,2], [3,4]]
x_data=torch.tensor(data)
Numpy 배열로부터 생성
Numpy array로부터 텐서 생성 가능
텐서에서 Numpy array로 역변환도 가능
np_array=np.array(data)
x_np=torch.from_numpy(np_array)
다른 텐서로부터 생성
새로운 텐서는 명시적으로 재정의되지 않는 한 인수 텐서의 속성(모양, 데이터 유형)을 유지
x_ones = torch.ones_like(x_data)
print(f"Ones Tensor: \n {x_ones} \n")
x_rand = torch.rand_like(x_data, dtype=torch.float) # dtype을 표시해서 명시적으로 재정의함
print(f"Random Tensor: \n {x_rand} \n")
결과 :
Ones Tensor:
tensor([[1,1], [1,1]])
Random Tensor :
tensor([[0.7577, 0.3862], [0.5864, 0.0733]])
랜덤하게 또는 상수변수
shape는 튜플로 표시된 텐서의 차원정보
텐서 속성
모양, 데이터 유형 및 저장된 디바이스(CPU, GPU)를 설명
tensor.shape
tensor.dtype
tensor.device
텐서 연산
주의할 점
기본적으로는 CPU에 생성됨
GPU를 사용하고자 하면, GPU로 이동해야함
디바이스에서 큰 텐서를 복사하는 것은 시간과 메모리 측면에서 비효율적
텐서 연산은 같은 디바이스 내에서만 가능
if torch.cuda.is_available():
tensor= tensor.to("cuda")
연산
- indexing and slicing
- joining
- 산술 연산
- 단일텐서는 .item()함수를 활용해서 파이썬 자료형으로 변경 가능
-> loss쓸 때 자주 씀
eg. loss.item()
- in-place operations
ㄴ in-place : 결과를 피연산자에 저장
ㄴ 파이토치에서 접미사 _로 표시된 함수들은 inplace 작업 수행 e.g. x.copy_(y), x.add_()
텐서와 넘파이
tensor to numpy array
* 텐서랑 numpy array은 서로 영향을 줄 수 있음
t = torch.ones(5)
print(f"t: {t}")
n = t.numpy()
print(f"n: {n}")
numpy array to tensor
n = np.ones(5)
t = torch.from_numpy(n)
'Pytorch' 카테고리의 다른 글
DataLoader (0) | 2025.04.11 |
---|---|
Tensors Operation (0) | 2025.04.09 |
딥러닝 파이프라인 (0) | 2025.04.07 |
torch.cat과 torch.stack (1) | 2023.11.27 |
torch.nn과 torch.nn.functional (0) | 2023.09.11 |