1. 0으로 초기화된 tensor 생성
- a=torch.zeros(2) -- 1차원
- b=torch.zeros([2,3]) -- 2차원
- torch.zeros_like(a) -- (a텐서의 요소들을 0으로 초기화)
2. 1로 초기화된 tensor 생성
위에 0과 유사한다
- a=torch.ones(2) -- 1차원
- b=torch.ones([2,3]) -- 2차원
- torch.ones_like(a) -- (a텐서의 요소들을 0으로 초기화)
** 여기서 한가지 중요한 점은 ones_like() 와 zeros_like()를 사용해도 메모리 주소가 변하지 않는다는 점이다! AI에서 메모리는 모델의 성능에 영향을 미치기 때문!
3. 난수로 초기화된 tensor 생성
- 연속 균등(균일) 분포로 생성
- torch.rand(3)
- torch.rand([2,3])
- torch.rand_like(-)
- 정규분포로 생성
- torch.randn(3)
- torch.randn([2,3])
- torch.randn_like(-)
4. 지정범위에서 tensor 생성
- torch.arange(start=1,end=11,step=2) * end는 포함되지 않는다!
지금까지는 초기화를 시키고 tensor를 사용하는 것을 배웠지만 이제는 초기화 되지 않는 tensor를 배워보자!(즉 이미 메모리에 있는 값들로 채우자)
- 초기화가 되지 않은 tensor를 사용하는 이유
1.tensor를 만들고 바로 다른 값으로 덮어쓸 경우라면 불필요한 자원소모임!
2.큰 tensor를 다룰 때 불필요한 초기화는 메모미 사용량 증가, 메모리를 효율적으로 쓰자!
5. 초기화 되는 않는 tensor 생성
- q=torch.empty(5)
- q=torch.empty([2,3])
- q.fill_(3.0) or torch.fill(q,3.0) -- 초기화 되지 않은 tensor에 다른 값을 넣고 싶을 때(이때 메모리 주소가 변경되지는 않는다.)
6. numpy,list를 이용한 tensor로 생성
일반적인 pytorch에서 tensor를 만드는 법과 유사
- s=[1,2,3,4] , torch.tensor(s)
- u=np.array([[0,1],[2,3]]), v=torch.from_numpy(u)
** 이때 넘파이에서 생성된 tensor는 정수형이라서 실수형으로 바꿔주는 것이 좋다.(타입캐스팅)
torch.from_numpy(u).float
7. cpu tensor 생성
- 정수형 cpu tensor
- torch.intTensor([1,2,3,4,5])
- 실수형 cpu tensor
- torch.FloatTensor([1,2,3,4,5])
이외에도 Byte(부호없는 8비트 정수),Char(8비트 정수) ,Short(16비트 정수) ,Long(64비트 정수) ,Double(64비트 실수)로 tensor 생성이 가능하다.(위에 int,float자리에 넣어주면 됨)
8. tensor를 복제해서 생성
- y=x.clone()
- z=x.detach()
** clone과 detach의 차이는 detach는 x를 계산그래프에서 분리하여 새로운 tensor에 저장한다는 것
9. CUDA tensor 생성
파이토치의 가장 큰 장점이다!!
- 병렬 처리능력(대량의 연산을 동시에 수행할 수 있다.)
- 속도가 매우 빠르다.
- 경제적 이점 초기에는 비싼 비용이 들긴 하지만 시간,에너지 절약으로 장기적으로 이득이다.
+우리가 생성한 tensor가 어느 디바이스에 있는지 확인하기
a=torch.tensor([1,2,3])
a.device
-
CUDA 기술을 사용할 수 있는 환경인지 확인
torch.cuda.is_available()
-
CUDA device 이름을 확인하는 코드
torch.cuda.get_device_name(device=0)
-
사용 가능한 GPU 개수 파악
torch.cuda.device_count()
-
tensor를 GPU에 할당
torch.tensor([1,2,3]).to('cuda')
torch.tensor([1,2,3]).cuda()
-
GPU에 할당된 tensor를 다시 CPU에 할당
b.to(device='cpu')
b.cpu()