AI/Pytorch

Pytorch - Ones와 Zeros

hundredeuk2 2022. 9. 29. 18:09
728x90

우선 매서드 설명은 0이나 1로만 이루어져 있는 지정하는 shape만큼의 벡터를 생성한다.

 

들면 torch.ones(2,3)실행 tensor([[1., 1., 1.],[1., 1., 1.]])로 받는다.

Zeros또한 사용법은 같지만 output 0으로만 이루어져있는 행렬 tensor 반환된다.

torch.ones(2,3)

#output tensor([[1., 1., 1.],[1., 1., 1.]])

 

여기서 친절하게 data shape 유동적인 변환이 있을 경우를 위해 사용되는 likes매서드도 있다.

 

같은 행렬의 shape 만들어지는데 예시 사용법은 다음과 같다.

X = torch.tensor([[2,3,4],[3,3,1]])
print(torch.ones_like(X))


# output tensor([[1, 1, 1], [1, 1, 1]])

그럼 다음과 같은 매서드는 언제 쓰이나?

초기 딥러닝을 배울 RNN이라던지 CNN이라던지에 대해선 거의 활용도를 모를 가능성이 있다. 그래봤자 벡터의 크기가 다른 만큼을 padding하는 과정? 하지만 더더욱 직관적으로 쓰이는 모델이 있다.

 

BERT의 어텐션 마스크이다.

아직은 깊게 다루진 않으므로 가볍게 설명하자면

어텐션 마스크란 0 값을 가지는 패딩토큰으로 연산의 효율성을 위해 단어와 토큰을 구분할 있게 한다.

 

소결로는 입력 text데이터 길이 만큼 0으로 이루어져 있는 벡터와 1 이루어져 있는 벡터를 만들어야 한다는 뜻이다.

print(inputs['input_ids'])
tf.Tensor([[ 101 4715 2003 1037 2428 4569 103 1012 102]], shape=(1, 9), dtype=int32)

print(inputs['token_type_ids'])
tf.Tensor([[0 0 0 0 0 0 0 0 0]], shape=(1, 9), dtype=int32)

print(inputs['attention_mask'])
tf.Tensor([[1 1 1 1 1 1 1 1 1]], shape=(1, 9), dtype=int32)