텐서의 특징
텐서는 배열과 행렬과 비슷한 자료구조이다. PyTorch에서 텐서를 이용하여 입력과 출력, 그리고 모델의 파라미터를encode 한다.
텐서는 NumPy의 ndarray와 비슷하지만 한 가지 차이점이 있다. 그것은 텐서는 GPU를 활용하여 처리가 가능한 반면,
array는 CPU로 만 처리가 가능하다.
이번 포스트에선 텐서 초기화에 대해서 알아보자.
텐서 초기화 (Tensor Initialization)
텐서를 초기화한다는 의미는 텐서를 새로생성하거나 혹은 기존에 있던 객체를 텐서로 객체로 변경하는 것 이라고
생각하면 될것 같다.
1. 직접생성
데이터를 직접적으로 텐서화 시켜 텐서를 생성할 수 있다. 이때 데이터의 타입은 자동으로 유추하여 정해진다.
data = [[4,3], [2,1]]
x_data = torch.tensor(data)
out:
tensor([[4, 3],
[2, 1]])
2. NumPy Array 로 생성
NumPy array객체를 torch.from_numpy()를 이용해 텐서를 생성할 수 있다.
np_array = np.array(data)
x_np = torch.from_numpy(np_array)
3. 다른 텐서로 생성
다른 텐서를 명시적으로 재정의 하지 않으면 텐서를 새로 생성할 때 받아오는 텐서의 속성을 유지한다. 텐서의 속성은 (shape, datatype)을 의미한다. datatype을 재정의 하고 싶으면, 원하는 datatype을 두번째 인자로 입력하여 명시적으로 datatype을 override(덮어쓰기)한다.
x_ones = torch.ones_like(x_data) # 두번째 인자가 없으면 주어진 텐서의 속성을 유지
print(f"Ones Tensor: \n {x_ones} \n")
x_rand = torch.rand_like(x_data, dtype=torch.float) # 두번째 인자에 따라서 속성을 override
print(f"Random Tensor: \n {x_rand} \n")
out:
Ones Tensor:
tensor([[1, 1],
[1, 1],
[1, 1]])
Random Tensor:
tensor([[0.3695, 0.2507],
[0.2115, 0.8286],
[0.9574, 0.8415]])
4. 상수값과 random값을 이용하여 생성
주어진 shape안에서 임의의 값으로 텐서를 구성하는 torch.rand, 1로 구성하는 torch.ones, 0으로 구성하는 torch.zeros를 이용해 텐서를 생성할 수 있다.
shape = (4,3)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)
print(f'Random Tensor : \n {rand_tensor}\n')
print(f'Ones Tensor : \n {ones_tensor}\n')
print(f'Zeros Tensor : \n {zeros_tensor}\n')
out:
Random Tensor :
tensor([[0.4549, 0.5399, 0.3784],
[0.2229, 0.9858, 0.2569],
[0.5513, 0.7900, 0.7605],
[0.5579, 0.8577, 0.7643]])
Ones Tensor :
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
Zeros Tensor :
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
다음 포스트에선 텐서의 속성과 연산에 대해서 알아보자.
'AI' 카테고리의 다른 글
[PyTorch]Dataset과 DataLoader (1) | 2022.09.16 |
---|---|
[PyTorch]Tensor-part2 (0) | 2022.09.15 |
[Pytorch]패키지 기본구성 (0) | 2022.09.13 |
[논문리뷰]Generative Adversarial Nets (0) | 2022.09.13 |
[논문리뷰]Playing Atari with Deep Reinforcement Learning (0) | 2022.09.05 |
댓글