pyTorch
[Pytorch] torch.nn.init 초기화
0. 개요 torch.nn.init 안에 들어 있는 xavier 초기화와 kaiming 초기화에 대해 서술한다. 1. 가중치 초기화 기법 딥러닝에서 layer 를 여러 개 쌓아 DNN 을 만들면 모델의 복잡도가 높아져서 다양한 문제를 해결할 수 있게 된다. 그러나 layer 가 깊어질수록 역전파되는 gradient 가 불안정해진다는 단점이 생긴다. gradient 가 너무 작아지거나 폭주하는 문제가 발생할 수 있는데, 그러면 당연히 모델 학습이 제대로 이루어지지 않는다. 이 문제를 해결하기 위해 여러 방법이 제안되었는데, 이 글에서는 layer 가중치 초기화 기법에 대해 서술하고자 한다. 불안정한 gradient 흐름의 원인이 각 층의 출력과 입력에 대한 분산이 서로 다르기 때문이라는 주장이 있었다. 그..
[Pytorch] torch.nn.Conv2d
0. 개요 pytorch.nn 의 Conv2d 클래스 사용법을 알아본다. convolution 개념을 알고 있어야 하므로, 모른다면 아래 글을 읽어보자. (https://kalpaca.tistory.com/116) 1. torch.nn.Conv2d torch.nn.Conv2d 는 pytorch 의 신경망 모듈인 nn 에 속해있는 클래스이고, 2차원 convolution layer 를 구현해 놓은 것이다. 주로 사용하는 클래스의 prototype 은 다음과 같다. torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, bias=True) 인자를 하나씩 살펴보도록 하자. in_channels (필수) fo..
[Pytorch] Linear Layer
0. 개요 Neural Net layer 의 기본인 Linear Layer 를 구현해보자. 1. Linear layer Linear layer 는 크게 3부분으로 나누어 생각할 수 있다. 입력층 (input layer) - 그림에서 맨 왼쪽에 있는 부분이다. - 입력 데이터라고 생각해도 된다. 은닉층 (hidden layer) - 그림에서 가운데 있는 3개 layer 를 의미한다. - 출력층으로 가기 전에 거치는 중간 층으로 생각하면 된다. 출력층 (output layer) - 그림에서 맨 오른쪽에 있는 부분이다. - 최종 출력 데이터라고 생각해도 된다. 각 층에 있는 동그라미를 뉴런이라고 하는데, 각 뉴런을 연결하는 선은 가중치 (weight) 이다. 그림에는 보이지 않지만 편향 (bias) 도 존재할..
[Pytorch] Tensor 만들기 - 3
0. 개요 이미 가지고 있는 데이터를 사용해서 Tensor 를 만들어보자. 1. torch.tensor() torch.tensor(data, dtype=None, device=None, requires_grad=False) torch.tensor() 함수를 사용하면 새로운 텐서를 만들 수 있다. 이 과정은 Tensor 클래스의 객체를 새로 생성함으로써 진행된다. 주로 사용하는 인자들을 하나씩 알아보자. data array 형식으로 이루어진 자료가 들어올 수 있다. 리스트, 튜플, numpy 배열, tensor 등이 들어올 수 있다. dtype 생성할 텐서의 타입을 지정한다. default 는 None 인데, None 이면 인자로 들어온 data 의 타입으로부터 추론해서 결정된다. device 텐서가 올라..
[Pytorch] Tensor 만들기 - 2
0. 개요 텐서의 크기를 직접 입력하지 않고, 이미 만들어진 텐서를 이용해서 새로운 텐서를 만들어보자. 1. 특징 이번 글에서 볼 함수들의 공통점은 다음과 같다. import torch tensor_XXX_like = torch.XXX_like(input=???, dtype=???, device=???, requires_grad=???) 이전 글에서 본 함수 이름 뒤에 "_like" 가 붙은 형태의 함수를 살펴보려 한다. "input" 이라는 인자가 새로 생겼는데, 여기에는 Tensor 타입의 객체가 들어간다. 인자로 들어온 텐서의 크기와 같은 크기의 새로운 텐서가 각 함수에 알맞는 값으로 초기화되어 리턴된다. 2. 텐서 생성 함수 본격적으로 텐서 생성 함수를 알아보자. input 으로 사용되는 모든 텐..
[Pytorch] Tensor 만들기 - 1
0. 개요 이미 정해져 있거나 우리가 원하는 특정한 값으로 초기화된 Tensor 를 만들어보자. 1. 특징 이번 글에서 볼 함수들의 공통점은 다음과 같다. import torch tensor_XXX = torch.XXX(size=???, dtype=???, device=???, requires_grad=???) XXX 는 텐서를 만들 수 있는 함수 이름을 의미한다. 함수를 호출할 때 조금 더 다양한 argument 를 넣을 수 있지만, 주로 사용하는 것은 저 4개 정도인 것 같다. 1) size - 생성할 텐서의 크기를 말한다. - 그냥 나열해도 되지만, 리스트나 튜플로 묶어서 넣어주는게 정신건강에 좋다. 2) dtype - 생성할 텐서의 타입이다. - 지정하지 않으면, default 로 torch.fl..