일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 대학원 월급
- 백준
- 인공지능
- 파이썬
- 딥러닝 실험 깃 버전관리
- pandas
- MLP
- 경사하강법
- 자바
- 파이썬 경사하강법
- 머신러닝
- 대학원 급여
- 자바 프로젝트
- 인공지능 깃 버전관리
- 코딩테스트
- 로스트아크
- 활성화 함수
- 의료 ai 대학원 월급
- Dehaze
- C# 프로젝트
- API
- 디자인 패턴
- python
- 정규화
- 통계학
- DCP
- 디자인패턴
- 자바 영화 api
- 영화 api
- 딥러닝
- Today
- Total
대학원 일기
Machine Learning & Pytorch(Tensor Manipulation) 본문
Machine Learning Pytorch(Tensor Manipulation)
벡터, 행렬, 텐서 ····
- 차원이 없는 값: 스칼라(Scalar)
- 1차원으로 구성된 값: 벡터(Vector)
- 2차원으로 구성된 값: 행렬(Matrix)
- 3차원으로 구성된 값: 텐서(Tensor)
4차원부터는 현실과 다르기 때문에 실제적으로 이해하기 힘들 수 있지만, 위 그림처럼 3차원 데이터의 텐서를 행렬 혹은 배열로 쌓은 것이라고 생각하면 된다.
데이터사이언스 분야 한정으로 3차원 이상의 텐서는 그냥 다차원 행렬 또는 배열로 간주할 수 있습니다. 또한 주로 3차원 이상을 텐서라고 하긴 하지만, 1차원 벡터나 2차원인 행렬도 텐서라고 표현하기도 합니다. 같은 표현입니다. 벡터 = 1차원 텐서, 2차원 행렬 = 2차원 텐서. 그리고 3차원 텐서, 4차원 텐서, 5차원 텐서 등...
1D Array with Pytorch
- 파이토치로1D Array 생성
2D Array with Pytorch
- 파이토치로2D Array 생성
Broadcasting
Numpy에서 행렬의 덧셈과 뺄셈을 할 경우, 두 행렬의 크기는 같아야 한다. 그리고 행렬의 곱셈이나 나눗셈을 할 경우는 앞 행렬의 마지막 차원과 뒷 행렬의 첫번째 차원이 같아야 연산이 된다. 이런 불가피성을 막기 위해 딥러닝에서는 브로드캐스팅을 사용한다.
브로드캐스팅이란?
- 자동으로 크기를 맞춰서 연산을 수행하게 함
행렬 곱셈(Matrix Multiplication)과 곱셈(Multiplication)
파이토치에서는 행렬간 곱셈을 하는 방법은 두 가지이다.
- 행렬 곱셈(.matmul)
- 원소별 곱셈(.mul)
평균(Mean)
차원을 주지 않을 경우, 총 원소의 평균 결과값이 나오고, 차원을 인자로 줄 경우 다르게 연산한다.
- dim=0 (첫번째 차원): 행렬에서 첫번째 차원은 행을 의미한다. 이를 mean()에 적용하면 '행'인 첫번째 차원을 제거한다.
-> tensor([[1., 2.], [3., 4.]])에서 1과 3의 평균을 구하고, 2와 4의 평균을 구한다.
- dim=1 (두번째 차원): 두번째 차원인 '열'을 제거한다.
-> tensor([[1., 2.], [3., 4.]])에서 1과 2의 평균을 구하고, 3와 4의 평균을 구한다.
- dim=-1 (마지막 차원): mean 에서는 마지막 차원을 제거한다는 의미
Sum(덧셈)
인자를 dim으로 주는 건 mean()과 동일하고, 평균을 내는 것 대신 덧셈을 함.
- dim=0 (첫번째 차원): 행렬에서 첫번째 차원은 행을 의미한다. 이를 sum()에 적용하면 '행'인 첫번째 차원을 제거한다.
-> tensor([[1., 2.], [3., 4.]])에서 1과 3을 더하고, 2와 4더한다.
- dim=1 (두번째 차원): 두번째 차원인 '열'을 제거한다.
-> tensor([[1., 2.], [3., 4.]])에서 1과 2를 더하고, 3와 4를 더한다.
- dim=-1 (마지막 차원): sum()에서는 마지막 차원을 제거한다는 의미
최대(Max)와 ArgMax
최대(Max)는 원소의 최대값을 리턴하고, ArgMax는 최대값을 가진 인덱스를 리턴한다.
max에 dim 인자를 줄 경우 두 값이 리턴되는데 이는 max와 argmax의 리턴값이다.
View(Reshape)
- 원소의 수를 유지하면서 텐서의 크기 변경. 매우 중요!!
- 3차원 텐서에서 2차원 텐서로 변경
view([-1, 3])에서 -1은 첫번째 차원은 잘모르겠으니 파이토치에게 맡기겠다라는 의미이고, 3은 두번째 차원의 길이는 3을 가지도록 하라는 의미이다.
(2, 2, 3) -> (2 x 2, 3) -> (4, 3)
view의 특징
- view는 기본적으로 변경 전과 변경 후의 텐서 안의 원소의 개수가 유지되어야 합니다.
- 파이토치의 view는 사이즈가 -1로 설정되면 다른 차원으로부터 해당 값을 유추합니다.
- 3차원 텐서의 크기 변경((2 × 2 × 3) 텐서를 (? × 1 × 3) 텐서로 변경)
스퀴즈(Squeeze)
- 차원이 1인 경우에 해당 차원을 제거한다.
ex) (3 x 1)의 크기를 가지는 텐서를 squeeze로 두번째 차원을 제거하여 (3,)의 크기를 가지는 텐서로 변경
언스퀴즈(Unsqueeze)
Squeeze와 반대로 특정 위치에 1인 차원을 추가함
View로도 똑같이 연산 가능함
Type Casting
텐서의 자료형을 변환하게 해줌
Concatenate
텐서 간 연결
dim=0일 경우, 첫번째 차원을 늘린다는 것. [두 개의 (2 x 2) -> (4 x 2)]
dim=1일 경우, 두번째 차원을 늘린다는 것. [두 개의 (2 x 2) -> (2 x 4)]
Stacking
텐서를 쌓는다. (concatenate와 비슷)
dim이 인자로 추가될 때는 해당 차원이 증가하도록 쌓으라는 의미이다.
concatenate와 unsqueeze를 통해 똑같이 구현할 수 있음. (stack을 사용하는 것이 더 간편)
Ones and Zeros(Ones_like, Zeros_like)
ones_like를 할 경우, 동일한 크기의 텐서에 1로만 이루어진 텐서를 생성함
zeros_like를 할 경우, 동일한 크기의 텐서에 0으로만 이루어진 텐서를 생성함
In-place Operation(덮어쓰기 연산)
뒤에 _(언더 바)를 붙이면 기존의 값에 덮어쓰기를 할 수 있다.
Refernce
02. 텐서 조작하기(Tensor Manipulation) 1
이번 챕터에서 배울 내용에 대해서 리뷰해보겠습니다. 벡터, 행렬, 텐서의 개념에 대해서 이해하고, Numpy와 파이토치로 벡터, 행렬, 텐서를 다루는 방법에 대해서 이 ...
wikidocs.net
'AI > 인공지능 기초' 카테고리의 다른 글
딥러닝(Deep learning) 서사 (0) | 2022.03.07 |
---|---|
MNIST 데이터 학습 (0) | 2022.02.23 |
파이썬 시각화툴(Matplotlib) (0) | 2022.02.14 |
pandas II (0) | 2022.02.13 |
선형(Linear) 데이터와 비선형(Non-linear) 데이터의 차이 (0) | 2022.02.03 |