티스토리 뷰
1. Tensor 만들기
가장 먼저 항상 사용되는 라이브러리인 torch와 numpy를 임포트
import numpy as np
import torch
임의의 값으로 초기화된 텐서를 만드는 rand(), 차원과 데이터 타입을 지정해 줄 수 있다.
x = torch.rand(2, 3, dtype=torch.float16) # 2 * 3차원이고 데이터 타입은 float16인 텐서 생성
tensor([[0.8472, 0.3481, 0.9297], [0.2480, 0.0684, 0.0674]], dtype=torch.float16)
1로 초기화된 텐서를 만드는 zeros() (비슷하게 0으로 초기화 시켜주는 zeros도 있다.)
x = torch.zeros(4, 2)
tensor(
[[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]])
python의 리스트를 넣어 초기화 해 줄 수 있다.
x = torch.tensor([[2.5, 0.1], [1.1, 4.5]], dtype=torch.float16)
tensor([[2.5000, 0.1000], [1.0996, 4.5000]], dtype=torch.float16)
2. 기본적 연산
Tensor 끼리 적용하는 사칙연산은 element wise하게 진행된다.
x = torch.tensor([1, 2, 3, 4])
y = torch.tensor([2, 3, 4, 5])
print(x + y) # tensor([3, 5, 7, 9])
print(x - y) # tensor([-1, -1, -1, -1])
print(x * y) # tensor([ 2, 6, 12, 20])
print(x / y) # tensor([0.5000, 0.6667, 0.7500, 0.8000])
inplace한 연산을 위해 _가 달려있는 함수를 이용할 수 있다.
x = torch.rand(2, 2)
y = torch.rand(2, 2)
y.add_(x) # y = x + y 와 같다
행렬의 곱을 위해서는 matmul을 이용한다.
x = torch.rand(3, 2)
y = torch.rand(2, 4)
z = x.matmul(y) # X * Y (행렬 곱)
Tensor의 크기(차원)을 알기 위해서는 size(), 또는 shape를 이용한다.
x = torch.rand(3, 2)
print(x.size()) # torch.Size([3, 2])
print(x.shape) # torch.Size([3, 2])
Tensor의 요소를 인덱싱을 통해 접근할 수 있다. [] 안에 row에 대한 인덱스 : column에 대한 인덱스를 넣어준다.
x = torch.rand(3, 2)
print(x)
print(x[:, 1])
Tensor의 차원을 바꾸기 위해서 view() 또는 reshape()를 사용한다. view는 원본과 데이터를 공유하므로 데이터가 바뀌게 되면, 원본의 데이터도 바뀌게 된다.
x = torch.rand(3, 2)
# tensor([[0.1433, 0.8912],
# [0.1237, 0.0601],
# [0.8288, 0.3015]])
y = x.view(6)
# tensor([0.1433, 0.8912, 0.1237, 0.0601, 0.8288, 0.3015])
y[0] = 1
print(x)
# tensor([[1.0000, 0.8912],
# [0.1237, 0.0601],
# [0.8288, 0.3015]])
3. numpy와 tensor 바꾸기
numpy에서 tensor로 : from_numpy() 를 이용한다.
a = np.ones(5)
b = torch.from_numpy(a)
tensor에서 numpy로 : numpy() 를 이용한다.
a = torch.ones(5)
b = a.numpy()
단, cpu만 사용하는 경우 둘이 원본과 새로 생성된 데이터는 같은 주소를 가리키므로, 하나가 바뀌면 다른 하나도 값이 바뀐다.
4. data를 GPU로 보내기
torch.cuda.is_available()로 gpu를 사용할 수 있는지 확인하고 gpu로 보낸다.
to(device)를 통해 해당 device(gpu/cpu)로 데이터를 보낼 수 있다.
numpy는 cpu에서만 사용가능함에 주의하자.
if torch.cuda.is_available():
device = torch.device("cuda")
x = torch.ones(5, device=device)
y = torch.ones(5)
y = y.to(device) # gpu로 데이터를 보낸다.
z = x + y
# z.numpy() # numpy는 cpu에서만 데이터를 처리할 수 있다.
z = z.to("cpu") # 데이터를 다시 cpu로 가지고 온다.
z.numpy()
- Total
- Today
- Yesterday
- CoT
- #BOJ
- #BOJ #2467번 #투포인터알고리즘
- emnlp2024
- KL_Divergence
- emnlp
- 파이토치
- two-pointers
- llm agent
- iclr
- #브루트포스
- directives
- javascript
- #BOJ #그리디알고리즘
- NAACL21
- python
- sliding window
- Rag
- 베르누이분포
- LLM
- DECI
- #BOJ #알고리즘 #1034번
- #1405번
- #information_retrieval
- LeetCode
- #BOJ #유클리드호제법
- 조건부확률
- GCN
- 인과관계추론
- PyTorch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |