Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 서브쿼리
- HackerRank
- 표준편차
- update
- MySQL
- nlp논문
- torch
- 코딩테스트
- 카이제곱분포
- SQL 날짜 데이터
- Statistics
- 논문리뷰
- LSTM
- CASE
- leetcode
- 자연어 논문 리뷰
- SQL코테
- 자연어 논문
- 짝수
- airflow
- sigmoid
- 설명의무
- NLP
- t분포
- Window Function
- sql
- inner join
- 그룹바이
- GRU
- 자연어처리
Archives
- Today
- Total
HAZEL
[ PyTorch 01. ] Basic, Operations, View, Slice and Index, Compile, AutoGrad 본문
DATA ANALYSIS/ML & DL
[ PyTorch 01. ] Basic, Operations, View, Slice and Index, Compile, AutoGrad
Rmsid01 2021. 4. 29. 12:5001. PyTorch Basic
: 타입만 다를 뿐 numpy 와 유사하게 동작한다.
import numpy as np
import torch
1. 기본 arange
print(np.arange(9)) # [0 1 2 3 4 5 6 7 8]
print(torch.arange(9)) # tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])
2. shape
# shape 를 알수 있음
nums = torch.arange(6)
nums.shape
3. type
type(nums)
4. numpy 로 변환
# 넘파이 변환이 가능함
nums.numpy()
5. reshape
# numpy 와 유사하게 reshape 를 할 수 있음
nums.reshape(2,3)
6. rand
# 랜덤으로 3,3 텐서 만들어주기
randoms = torch.rand((3,3))
# tensor([[0.0872, 0.9097, 0.4892],
# [0.7905, 0.4164, 0.2248],
# [0.4963, 0.1735, 0.3112]])
7. zeros
# np.zeros((3,3)) 와 유사함
zeros = torch.zeros((3,3))
torch.zeros_like(ones)
8. ones
ones = torch.ones((3,3))
2. Operations
PyTorch로 수학 연산 - 넘파이처럼 브로드캐스트 가능함
nums = nums.reshape((2,5))
nums + nums
# tensor([[ 0, 2, 4, 6, 8],
# [10, 12, 14, 16, 18]])
torch.add(nums, 3)
# tensor([[ 3, 4, 5, 6, 7],
# [ 8, 9, 10, 11, 12]])
# 넘파이로도 꺼내올 수 있음
result = torch.add(nums, 3)
result.numpy()
3. View
reshape 과 같은 기능이지만, View 보다는, reshape를 더 많이 사용함.
range_nums = torch.arange(9).reshape(3,3)
tensor([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
range_nums.view(-1)
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])
4. Slice and Index
nums = torch.arange(9).reshape((3,3))
tensor([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
nums[1] # tensor([3, 4, 5])
nums[1,1] #tensor(4)
# 슬라이스로 중간에 있는값을 가져옴
nums[1:, 1:] # tensor([[4, 5], [7, 8]])
nums[1:] # tensor([[3, 4, 5], [6, 7, 8]])
5. Compile
arr = np.array([1,1,1])
arr_torch = torch.from_numpy(arr) # numpy를 torch tensor 로 불러오기
arr_torch # int 형으로 들어와 있는데 , 이것을 float 형으로 바꿀 수 있음
# float 로 형변환
arr_torch.float()
# device 설정 - cuda(gpu) 가 없다면 자동으로 cpu 로 넘어가게끔 하는 코드
# gpu 인지 신경쓰지말고 그냥 공홈에 나와있는 이 코드를 사용하면 된다고 함.
device = "cuda" if torch.cuda.is_available() else 'cpu'
arr_torch.to(device) # device로 컴파일 됬다고 생각하면 된다고 함.
6. AutoGrad : 자동 미분
: 기울기를 주어서 학습이 되도록 하는 것
: Tensor 의 모든 연산에 대해서 자동 미분을 제공한다.
requires_grad 속성을 True로 설정하면, tensor에서 이뤄진 모든 연산들을 추적(track) 한다.
x = torch.ones(2,2, requires_grad = True)
y = x + 2
# tensor([[3., 3.],
# [3., 3.]], grad_fn=<AddBackward0>)
z = y* y * 3
# tensor([[27., 27.],
# [27., 27.]], grad_fn=<MulBackward0>)
out = z.mean()
# tensor(27., grad_fn=<MeanBackward0>)
추적한 후, 계산이 완료되면 `backward()` 를 호출하여, 모든 기울기를 자동으로 계산할 수 있게 한다.
이것이 .grad 속성에 누적된다.
out.backward() # 역전파
print(x.grad) # 기울기 구하기 - 미분 d(out)/dx를 출력
# tensor([[4.5000, 4.5000],
# [4.5000, 4.5000]])
기록을 추적하는 것을 중단하려면, `.detach()` 를 호출하여 연산기록으로부터 분리하여 이후 연산들의 추적을 방지할 수 있다.
`with torch.no_grad():` 코드로 감싸면 기울기를 구하지 않고, 배치노멀 이런걸 작동이 안된다. 트레인모드보다 빨라진다.
따라서 테스트할 땐 아래의 코드를 사용하면 된다. 즉, 연산 기록 추적을 멈출 수 있게 한다.
with torch.no_grad():
print((x**2).requires_grad)
* 아래 문서를 참고하였습니다.
tutorials.pytorch.kr/beginner/blitz/autograd_tutorial.html
패스트 캠퍼스 - 딥러닝/인공지능 올인원 패키지 Online
'DATA ANALYSIS > ML & DL' 카테고리의 다른 글
[Torch_Basic ML 01 ] Tensor Manipulation( 텐서 조작하기 ) (0) | 2021.10.13 |
---|---|
[ PyTorch 02. ] Data Preprocess , DataLoader, 데이터 시각화 (0) | 2021.04.30 |
[ Deep Learning 02 ] 경사하강 학습법 ( Gradient Descent ) , 옵티 마이저 ( Optimizer ) (0) | 2021.01.27 |
[Deep Learning 01 ] 얕은 신경망의 구조 ( Shallow Neural Network ) (0) | 2021.01.22 |
[Deep Learning 03 ] GRU ( Gated Recurrent Unit ) (0) | 2020.12.26 |