ANN

jus6886·2021년 12월 27일
0

Deep learning

목록 보기
4/4

ANN은 사람의 신경망 원리와 구조를 모방하여 만든 기계학습 알고리즘이다.

텐서는 숫자들을 특정한 모양으로 배열한 것이다.
1-> 스칼라, 모양은[][1,2,3]-> 벡터, 모양은 [3][1,2,3]]-> 행렬, 모양은[1,3][[1,2,3]]]-> n랭크, 모양은 [1,1,3]

import torch
x = torch.tensor([[1,2,3], [4,5,6], [7,8,9]])
print(x)

-> tensor([[1,2,3],[4,5,6],[7,8,9]])


  • 구체적인 형태를 알 수 있다.
print("Size:", x.size())

->Size: torch.Size([3,3])

print("Shape:", x.shape)

-> Shape: torch.Size([3,3])

print("랭크(차원):", x.ndimension())

->랭크(차원):2

원소의 개수는 변함이 없다. 원소가 9개인 텐서를 2x4인 8개인 텐서로 바꿀 순 없다.


랭크 늘리기

x = torch.unsqueeze(x, 0)
#[3,3]형태의 랭크2텐서의 첫 번째(0번째) 자리에 1이라는 차원을 추가해 [1,3,3]모양의 랭크 3텐서로 변경한다.
print(x)
print("Size:", x.size())
print("Shape:", x.shape)
print("랭크(차원):", x.ndimension())

result
tensor([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]])
Size: torch.Size([1, 3, 3])
Shape: torch.Size([1, 3, 3])
랭크(차원): 3

unsqeeze에 1을 넣었을 땐 사이즈가 3,1,3이 나온다.


랭크 줄이기

x = torch.squeeze(x)
print(x)
print("Size:", x.size())
print("Shape:", x.shape) #[3, 3] 2개의 차원에 각 3개의 원소를 가진 텐서
print("랭크(차원):", x.ndimension())

result
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Size: torch.Size([3, 3])
Shape: torch.Size([3, 3])
랭크(차원): 2


랭크의 형태 바꾸기

x = x.view(9)
print(x)
print("Size:", x.size())
print("Shape:", x.shape)
print("랭크(차원):", x.ndimension())

result
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
Size: torch.Size([9])
Shape: torch.Size([9])
랭크(차원): 1



정답과 머신러닝 모델이 예측한 결과의 차이를 거리라고하고, 학습데이터로 계산한 거리들의 평균을 오차라고 한다.

경사하강법은 오차를 미분하여 기울기를 구해 오차의 최솟값이 있는 방향을 찾아내는 알고리즘이다. autograd는 미분 계산을 자동화하여 경사하강법을 구현하는 것이다.
requires_grad=True 로 설정하면, 자동으로 계산될 때 w에 대한 미분값을 w.grad에 저장한다.
1=a^2=(3w)^2
l을 w로 미분하려면 연쇄법칙에 의해 a와 w로 차례대로 미분을 해줘야한다. 그 기능은 backward() 함수를 사용하면 된다.
w.grad는 w가 속한 수식을 w로 미분한 값, 즉 18을 반환하였다.







참고
책 (펭귄브로의 3분 딥러닝 파이토치맛)

profile
공부한 것들을 정리하는 블로그

0개의 댓글