본문 바로가기

전체 글

내가 공부하려 만든 Pytorch8(Type Casting ~ In-place Operation) Type Casting 텐서에는 자료형이라는 것이 있습니다. 각 데이터형별로 정의되어져 있는데, 예를 들어 32비트의 부동 소수점은 torch.FloatTensor를, 64비트의 부호 있는 정수는 torch.LongTensor를 사용합니다. GPU 연산을 위한 자료형도 있습니다. 예를 들어 torch.cuda.FloatTensor가 그 예입니다. 그리고 이 자료형을 변환하는 것을 타입 캐스팅이라고 합니다. 예제 lt = torch.LongTensor([1, 2, 3, 4]) print(lt) print(lt.float()) tensor([1, 2, 3, 4]) tensor([1., 2., 3., 4.]) bt = torch.ByteTensor([True, False, False, True]) print(.. 더보기
내가 공부하려 만든 Pytorch7(Unsqueeze) Unsqueeze 특정 위치에 1인 차원을 추가한다. 언스퀴즈는 스퀴즈와 정반대입니다. 특정 위치에 1인 차원을 추가할 수 있습니다. view로도 구현 가능합니다. 1. 벡터 생성 ft = torch.Tensor([0, 1, 2]) print(ft.shape) ft torch.Size([3]) tensor([0., 1., 2.]) 2. Unsqueeze 사용 2차원 행렬로 차원 증가 print(ft.unsqueeze(0))#0번째 차원에 1인 차원 추가 print(ft.unsqueeze(0).shape) print(ft.unsqueeze(0).dim()) tensor([[0., 1., 2.]]) torch.Size([1, 3]) 2 print(ft.unsqueeze(1))#1번째 차원에 1인 차원 추가 .. 더보기
내가 공부하려 만든 Pytorch6(view,squeeze) View 원소의 수를 유지하면서 텐서의 크기 변경. 파이토치 텐서의 뷰(View)는 넘파이에서의 리쉐이프(Reshape)와 같은 역할을 합니다. Reshape라는 이름에서 알 수 있듯이, 텐서의 크기(Shape)를 변경해주는 역할을 합니다. 1. 3d 텐서 생성 t = np.array([[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]) ft = torch.FloatTensor(t) print(ft) print(ft.shape) print(ft.dim()) tensor([[[ 0., 1., 2.], [ 3., 4., 5.]], [[ 6., 7., 8.], [ 9., 10., 11.]]]) torch.Size([2, 2, 3]) 3 2. 3d 텐서에서 2d 텐서로 변.. 더보기
내가 공부하려고 만든 Pytorch4(Permute와 Transpose) Permute와 Transpose permute()와 transpose()는 유사한 방식으로 작동한다. transpose()는 딱 두 개의 차원을 맞교환할 수 있다. 그러나 permute()는 모든 차원들을 맞교환할 수 있다. 1. 3차원 텐서 생성 x = torch.rand(16, 32, 3) print(x.shape) print(x.dim()) torch.Size([16, 32, 3]) 3 2. Transpose x.transpose(0,2)가 x의 차원 0과 2의 값인 3과 16의 값을 서로 바꾸어 준다. y=x.transpose(0,2) y.shape torch.Size([3, 32, 16]) 3. Permute x.permute(2,1,0)가 x의 차원의 값이 0, 1, 2값이 2, 1, 0의 .. 더보기
내가 공부하려고 만든 Pytorch5(3d Tensor 혼자 해보기) 3d tensor 생성 z = torch.FloatTensor( [ [[0, 0, 0, 0, 0], [50, 50, 50, 50, 50], [100, 100, 100, 100, 100], [150, 150, 150, 150, 150], [0, 0, 0, 0, 0]], [[10, 10, 10, 10, 10], [60, 60, 60, 60, 60], [110, 110, 110, 110, 110], [160, 160, 160, 160, 160], [0, 0, 0, 0, 0]], [[20, 20, 20, 20, 20], [70, 70, 70, 70, 70], [120, 120, 120, 120, 120], [170, 170, 170, 170, 170], [250, 250, 250, 250, 250]], ] ) .. 더보기
내가 공부하려고 만든 Pytorch3(브로드캐스팅) 브로드캐스팅(Broadcasting) 두 행렬 A, B가 있다고 해봅시다. 행렬의 덧셈과 뺄셈에 대해 알고계신다면, 이 덧셈과 뺄셈을 할 때에는 두 행렬 A, B의 크기가 같아야한다는 것을 알고계실겁니다. 그리고 두 행렬이 곱셈을 할 때에는 A의 마지막 차원과 B의 첫번째 차원이 일치해야합니다. 물론, 이런 규칙들이 있지만 딥 러닝을 하게되면 불가피하게 크기가 다른 행렬 또는 텐서에 대해서 사칙 연산을 수행할 필요가 있는 경우가 생깁니다. 이를 위해 파이토치에서는 자동으로 크기를 맞춰서 연산을 수행하게 만드는 브로드캐스팅이라는 기능을 제공합니다. 우선 같은 크기일 때 연산을 하는 경우를 보겠습니다. m1 = torch.FloatTensor([[3, 3]]) m2 = torch.FloatTensor([[2.. 더보기
내가 공부하려고 만든 Pytorch2(벡터, 행렬, 텐서 만들기) 넘파이로 텐서 만들기(벡터와 행렬 만들기) PyTorch로 텐서를 만들어보기 전에 우선 Numpy로 텐서를 만들어보겠습니다. 우선 numpy를 임포트합니다. import numpy as np Numpy로 텐서를 만드는 방법은 간단한데 [숫자, 숫자, 숫자]와 같은 형식으로 만들고 이를 np.array()로 감싸주면 됩니다. 1) 1D with Numpy Numpy로 1차원 텐서인 벡터를 만들어보겠습니다. t = np.array([0., 1., 2., 3., 4., 5., 6.]) # 파이썬으로 설명하면 List를 생성해서 np.array로 1차원 array로 변환함. print(t) [0. 1. 2. 3. 4. 5. 6.] 이제 1차원 텐서인 벡터의 차원과 크기를 출력해보겠습니다. print('Rank .. 더보기
내가 공부하려고 만든 Pytorch1(벡터, 행렬 그리고 텐서) 항상 헷갈리는 차원(익숙해질 때 까지 볼 것!) 1. 벡터, 행렬 그리고 텐서(Vector, Matrix and Tensor) 1) 벡터, 행렬, 텐서 그림으로 이해하기 딥 러닝을 하게 되면 다루게 되는 가장 기본적인 단위는 벡터, 행렬, 텐서입니다. 차원이 없는 값을 스칼라(위의 그림에는 없음), 1차원으로 구성된 값을 우리는 벡터라고 합니다. 2차원으로 구성된 값을 행렬(Matrix)라고 합니다. 그리고 3차원이 되면 우리는 텐서(Tensor)라고 부릅니다. 사실 우리는 3차원의 세상에 살고 있으므로, 4차원 이상부터는 머리로 생각하기는 어렵습니다. 4차원은 3차원의 텐서를 위로 쌓아 올린 모습으로 상상해보겠습니다. 5차원은 그 4차원을 다시 옆으로 확장한 모습으로 생각해봅시다. 6차원은 5차원을 뒤.. 더보기