tensor 생성하는 method

seung·2024년 8월 5일

pytorch

목록 보기
3/10

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 생성

  1. 연속 균등(균일) 분포로 생성
  • torch.rand(3)
  • torch.rand([2,3])
  • torch.rand_like(-)
  1. 정규분포로 생성
  • 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 생성

  1. 정수형 cpu tensor
  • torch.intTensor([1,2,3,4,5])
  1. 실수형 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 생성

파이토치의 가장 큰 장점이다!!

  • CUDA란?
    nvidia에서 개발한 병렬컴퓨팅플랫폼과 프로그래밍으로써 효율적으로 gpu를 사용할 수 있도록 한다.

  • ai 에서 GPU를 사용해야 하는 이유

  1. 병렬 처리능력(대량의 연산을 동시에 수행할 수 있다.)
  2. 속도가 매우 빠르다.
  3. 경제적 이점 초기에는 비싼 비용이 들긴 하지만 시간,에너지 절약으로 장기적으로 이득이다.

+우리가 생성한 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()

0개의 댓글