딥러닝은 기본적으로 vector, Matrix, Tensor 을 가지고 계산을 하게 된다. 엄밀이 설명하면 설명하면 벡터는 1차원 행렬, Matrix는 이차원 행렬, Tensor는 3차원 행렬을 의미한다. 하지만 벡터, 행렬은 텐서의 한 종류로 같은 연산을 따른다.
tensor 연산에서 나오는 dim 변수는 해당 차원의 사이즈를 의미하는 것이므로 명심할것!
기본적인 tensor 연산
Tensor 선언
FloatTensor 선언 : float 형 변수를 가지고 있는 tensor을 선언한다.
t = torch.FloatTensor([0., 1., 2., 3.])
ByteTensor 선언: Bool 변수를 가지고 있는 tensor을 선언한다.
lt = torch.ByteTensor([True, False, True])
*출력하면 0,1의 값으로 나온다. 나중에 이를 통해 이진변수로 만들어 활용할 수 있다.
LongTensor 선언: Long 변수를 가지고 있는 tensor을 선언한다.
lt = torch.LongTensor([[0], [1], [2], [0]])
Tensor 모양 확인
tensor_name.dim()
: tensor가 몇차원인지 확인
tensor_name.size()
: tensor의 사이즈 확인 -> 몇 행 몇열인지 알려줌
Tensor 기본 연산(BroadCasting)
같은 크기 일때 : 단순히 더하기 연산을 통해 각 요소를 더해줄 수 있음.
다른 크기 일때 : 각 요소를 크기에 맞게 확장시켜준뒤 더해줌
다만 2X1 혹은 1X2과 같은 행렬 처럼 같은 방식으로 행 또는 열을 복제할 수 있는 경우만 가능하며 위의 함수처럼 2X2, 3X1행렬 처럼 복제를 통해서 같은 모형을 만들 수 없는 경우 size에러가 발생한다.
Tensor Multiplication
Tensor_name.mul(Tensor_name2)
: Tensor_name과 Tensor_name2의 각요소끼리만 곱해준다.
Tensor_name.matmul(Tensor_name2)
: Tensor_name과 Tensor_name2를 행렬 곱의 연산을 해준다.
Mean
Tensor_name.mean()
: 모든 요소의 평균값을 제공한다.(단, 연산결과 float값이 나오는 경우는 FloatTensor선언된 Tensor만 계산 가능하다.)
.mean(dim=num)
: num에 해당하는 차원의 사이즈를 1로 만들어주고 그 값에 그 차원의 평균값을 넣어준다.
Sum
tensorl.name()
: 모든 요소의 합을 출력하여 준다.
.sum(dim=num)
: num에 해당하는 차원의 사이즈를 1로 만들어주고 그 값에 그 차원의 합계를 넣어준다.
dim = -1
보통 마지막 행을 의미하는데, 조건을 나타내는 경우, 남은 해당 조건이외의 차원을 의미한다. 그리고 0, 1, ...을 넣을 수 있고 차원의 번호를 의미한다. 따라서 tensor연산에 이 문구를 넣을 경우 그 연산의 범위를 제한 해줄 수 있다.
Max and Argmax
Tensorname.max()
: Tensor의 최댓값을 가져온다.
Tensorname.argmax()
: Tensor의 최댓값의 위치를 가져온다.
View
tensor[].shape
: [ ]안에 들어가는 차원의 원소의 갯수와 tensor의 원소의 갯수가 같으면 []안에 주어진대로 변형을 해준다.
tensor.squeeze()
: 사이즈가 1인 차원을 제거해준다.
Concatenate
torch.cat
: 두개의 텐서를 합쳐준다.
torch.stack
: 두개의 텐서를 합쳦준다.
mul
mul
: 스칼라 량을 곱해주기만한다..
_mul
: 스칼라 량을 곱한뛰 저장해준다.