파이토치 딥러닝 마스터 - Tensor

esc247·2022년 9월 4일
0

AI

목록 보기
1/22
post-thumbnail

CH3. 텐서 구조체

딥러닝은 데이터를 하나의 형태에서 다른 형태로 변환하는 시스템을 구축하는 과정을 포함한다.
-> 입력을 부동소수점 수로 변환하는 것부터 시작


심층 신경망Deep Neural Network 는 여러 단계 거쳐 데이터 변환 학습,
그래서 각 단계 사이의 일부 변환된 데이터들은 중간 단계를 표현하는 연속적인 흐름으로 생각한다.

Tensor

  • 데이터 처리와 저장을 위해 파이토치에서 제공하는 자료구조
  • 다차원 배열_multidimensional array

파이썬 리스트,튜플 객체는 메모리에 따로따로 할당되는 반면, 파이토치 텐서나 넘파이 배열은 파이썬 객체가 아닌 언박싱unboxing 된 C언어 숫자 타입을 포함한 연속적인 메모리가 할당되고 이에 대한 뷰를 제공한다.

Broadcasting
: 파이토치는 동일한 차원 정보의 텐서끼리 연산할 수 있고, 각 차원의 길이가 1인 텐서도 가능, 혹은 길이가 1인 차원을 알아서 늘려주기도 하는데 이를 브로드캐스팅이라 한다.

dtype

  • 텐서 생성자 실행시 넘겨주는 인자, 내부에 들어갈 데이터 타입을 지정.
  • 기본 데이터 타입은 32비트 부동소수점.
import torch
double_points = torch.ones(10,2 , dtype =torch.double)
short_points = torch.tensor([[1,2],[3,4]], dtype = torch.short)
double_points.dtype, short_points.dtype

output: (torch.float64, torch.int16)

  • .double(), .short(), .to(dtype=torch.shotr) 등의 캐스팅 메소드 사용해 타입 변환 가능.

Storage

  • 텐서 내부 값은 실제로는 torch.Storage 인스턴스로 관리, 연속적인 메모리 조각으로 할당된 상태.
  • 저장 공간은 숫자 데이터를 가진 1차원 배열
    (c의 포인터 개념과 비슷하다고 생각하면 될듯)
points = torch.tensor([[4., 1.],[5.,3.],[2,1]])
points.storage()
#
Out : 4.0
 1.0
 5.0
 3.0
 2.0
 1.0
[torch.storage._TypedStorage(dtype=torch.float32, device=cpu) of size 6]
`

실제 데이터 텐서로 표현하기

  • 이미지 파일 로딩 : 이미지 데이터를 다루는 파이토치 모듈은 텐서가 CxHxW, 즉 채널,깊이,너비 순으로 배치되어야 한다.
import imageio
img_arr = imageio.imread('../data/p1ch4/image-dog/bobby.jpg')
img_arr.shape
###
Out: (720, 1280, 3)
  • 레이아웃 변경하기 : permute 메소드 사용, HxWxC 입력 텐서에 대해 체널2와 체널0 그리고 체널1 순으로 나열되도록 변경하면 적절한 레이아웃이 된다.
import torch
img = torch.from_numpy(img_arr)
out = img.permute(2,0,1)
out.shape
#
Out: torch.Size([3, 720, 1280])
  • 여러 장의 이미지 데이터셋을 만들 때, 첫 번째 차원에 여러 이미지를 batch로 넣어 N x C x H x W 텐서로 저장
profile
막상 하면 모르니까 일단 하자.

0개의 댓글