Logistic Regression은 데이터가 어떤 범주에 속할 확률을 0~1사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘입니다.

예를 들어, 어떤 메일을 받았을 때 그것이 스팸일 확률이 0.5이상이면 스팸으로 분류하고, 0.5보다 작을 경우 정상 메일로 분류하는 겁니다.

이렇게 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것2진 분류(binary classification)라고 합니다.

확률이지만 확률 밀도함수는 아닌...? 그런 녀석

H(x)는 x가 1일 확률이고 위와 같이 표현하는 방식이 여러개인것 같습니다.

 

※ 참고:

http://hleecaster.com/ml-logistic-regression-concept/

https://ratsgo.github.io/machine%20learning/2017/04/02/logistic/

 


 

Sigmoid 함수

위와 같이 Logistic Regression을 만족하는 함수로 sigmoid를 사용합니다.

sigmoid 함수를 이용해서 0~1 사이의 값을 가질수 있게 해주는 함수입니다.

Sigmoid

※ 참고: https://icim.nims.re.kr/post/easyMath/64

 


 

Logistic Regression 작성

일단 필요한 module을 import 시켜줍니다.


사용할 data 및 w(weight), b(bias)를 선언해줍니다.

 


 

hypothesis를 선언해 줍니다.

왼쪽은 sigmoid 식을 그대로 선언한 것입니다.

하지만 torch에서는 torch.sigmoid()를 이용해 간단하게 사용할 수 있습니다.


 

log loss function

Logistic Regression에서 사용할 loss함수를 선언해 줍니다.

losses는 log loss 함수를 그대로 선언한 것입니다.

하지만 log loss 역시도 F.binary_cross_entropy()를 이용해 간단하게 사용할 수 있습니다.

※ F = torch.nn.functional

※ 여기서 Linear Regression에서 사용한 Cost 함수를 사용하지 않은 이유!

    - sigmoid 함수는 비선형적인 함수입니다. 그래서 제곱을 해주게 되면 Cost 함수는

      위와 같이 엄청난 비선형적인 형태와 비슷한 형태가 될것입니다.

      경사하강법(Gradient Descent)을 사용하게 되면 우리가 원하는 2번을 얻을 수도 있지만 1,3,4번에 정체되어 있을

      확률이 상당히 높습니다.

      이러한 이유로 Logistic Regression에서는 Cost함수로 Log loss 함수를 사용하게 됩니다.


Training

위에서 선언한 hypothesis, cost 를 이용해 학습을 합니다.


Evaluation

여기서는 학습된 w, b가 얼마나 정확히 학습이 됐는지 확인해보겠습니다.

0 또는 1로 나타내주기 위해서 hypothesis >= torch.FloatTensor([0.5])를 사용했습니다.

0.5보다 크다면 1, 0.5보다 작으면 0으로 바꿔줍니다.

True = 1, False = 0


prediction.float() == y_train: 값이 같으면 True, 다르면 False.

학습이 잘 된것을 확인할 수 있습니다.

 


실제로 사용할때!!!

'Deep Learning > Pytorch' 카테고리의 다른 글

09_Pytorch_Softmax_Classifier MNIST  (0) 2021.08.25
08_Pytorch_Softmax_Classification  (0) 2021.08.18
05_Pytorch_nn.Module  (0) 2021.08.13
04_Pytorch_Multivariate_Linear_Regression  (0) 2021.08.12
03_Pytorch_Linear_Regression  (0) 2021.08.12

https://ggongsowon.tistory.com/17

 

04_Pytorch_Multivariate_Linear_Regression

Multivairate Linear Regression 복수의 정보가 존재할때 하나의 추측값을 계산 1. torch.FloatTensor를 이용해 Data 선언. 2. torch.zeros를 이용해 W, b 선언. 3. optimizer(SGD) 선언. 4. 훈련 ※ hypothesi..

ggongsowon.tistory.com

 

앞서 Multivariate_Linear_Regression을 해보았습니다.

하지만 torch에서는 더욱 편리하게 사용하기 위해 nn.Module을 제공합니다.

 

1. nn.Module을 상속하는 model class를 만들어 줍니다.

 - nn.Linear(3, 1) 여기서 3은 입력 dim, 1은 출력 dim을 나타냅니다.

     ※ y = x1w1 + x2w2 + x3w3 + b

 - 즉, x가 3개가 들어가면 y는 1개가 나오는 겁니다.

 - def forward는 값이 들어왔을때의 계산 방법입니다.

 


2. 1번에서 정의한 model 선언을 해줍니다.


3. optimizer 정의를 해줍니다. 여기서는 [W, b]를 사용하지 않고 model.parameters()를 사용해 줍니다.


4. 학습을 진행시켜 줍니다.

 - hypothesis는 선언한 모델에 x_train을 넣어줍니다.

 - cost는 torch.nn.functional에서 제공해주는 mse_loss를 사용해줍니다.


5. 결과

'Deep Learning > Pytorch' 카테고리의 다른 글

08_Pytorch_Softmax_Classification  (0) 2021.08.18
07_Pytorch_Logistic_Regression  (0) 2021.08.18
04_Pytorch_Multivariate_Linear_Regression  (0) 2021.08.12
03_Pytorch_Linear_Regression  (0) 2021.08.12
02_Pytorch Shape and Calculation  (0) 2021.08.10

Multivairate Linear Regression

복수의 정보가 존재할때 하나의 추측값을 계산

 

 

1. torch.FloatTensor를 이용해 Data 선언.

2. torch.zeros를 이용해 W, b 선언.


 

3. optimizer(SGD) 선언.


 

4. 훈련

※ hypothesis = x_train.matmul(W) + b 여기서 matmul이란??

 - 행렬 곱셈

 ex) m1 = torch.FloatTensor([[1, 2], [3, 4]])

      m2 = torch.FloatTensor([[1], [2]])

      m1.matmul(m2) = m1(2 x 2) * m2(2 x 1)

'Deep Learning > Pytorch' 카테고리의 다른 글

07_Pytorch_Logistic_Regression  (0) 2021.08.18
05_Pytorch_nn.Module  (0) 2021.08.13
03_Pytorch_Linear_Regression  (0) 2021.08.12
02_Pytorch Shape and Calculation  (0) 2021.08.10
01_Pytorch Shape and Calculation  (0) 2021.08.09

Colab으로 Pytorch 이용하기

  1. Google에 Colab 검색 및 접속 - https://colab.research.google.com/
  2. 런타임(상단바) → 런타임 유형 변경 → 하드웨어 가속기: GPU 설정
  3. torch, torchvision 설치하기
    • !pip3 install torch
    • !pip3 install torchvision
  4. import torch, import torchvision 선언

 

일반적으로 설치할때는 cuda 11.1 기준으로

conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge

위와 같이 cmd 창에 적어준다.


Colab 단축키

  • Ctrl + M → B : 현재 셀 위치의 아래쪽에 셀 추가
  • Ctrl + M → A : 현재 셀 위치의 위쪽에 셀 추가
  • Ctrl + M → D : 현재 셀 삭제
  • Ctrl + Enter : 현재 셀 실행
  • Alt + Enter : 현재 셀을 실행 후 아래쪽에 셀 추가
  • Shift + Enter : 현재 셀 실행 후 커서 아래쪽으로 이동

 


Colab 환경 구축을 완료 했으니 간단한 Pytorch 예제를 해보자.

 

학습 시킬 Hypothesis입니다.

오른쪽 그래프와 같이 x, y값들이 주어지고 이를 만족하는 W, b를 찾는 것입니다.

여기서 알맞은 값을 찾기 위해 W(weight)와 b(bias)를 학습을 시킬 것입니다.

 

 

 

1. FloatTensor를 이용하여 x, y값을 선언해줍니다.


 

 

2. 학습을 시켜주기 위한 W와 b도 선언을 해줍니다.

    torch.zeros(a, requires_grad=True): 0으로 채워진 a를 생성

    - requires_grad=True: 학습이 가능하게 설정


 

 

3. 우리의 예측값과 실제 값을 비교하기 위해 cost 함수 선언 - 즉, 예측값과 실제값과의 차이가 얼마나 나는지


 

 

4. 학습을 시키기 위해 SGD를 이용합니다. 

    - optimizer는 나중에 시간이 되면 자세한 설명을 올려야지...


 

5. 훈련 횟수(nb_epochs)는 1000번

 - optimizer.zero_grad(): optimizer를 초기화 시켜줍니다.

 - cost.backward(): cost를 W,b에 대해서 gradient 계산. - 역전파

 - optimizer.step(): gradient descent

'Deep Learning > Pytorch' 카테고리의 다른 글

07_Pytorch_Logistic_Regression  (0) 2021.08.18
05_Pytorch_nn.Module  (0) 2021.08.13
04_Pytorch_Multivariate_Linear_Regression  (0) 2021.08.12
02_Pytorch Shape and Calculation  (0) 2021.08.10
01_Pytorch Shape and Calculation  (0) 2021.08.09

reshape

[2, 2, 3]

  • depth: 2
  • height: 2
  • width: 3

ft.view([-1, 3]):  [2, 2, 3]에서 width(3) 고정 후 자동으로 reshape, [2, 2, 3] → [4 (2 x 2), 3]

 


차원이 1인 경우 없애준다.

ex) [3, 1] → [3]

 


Squeeze와 반대로 차원을 추가해준다.

ex) [3] → [1, 3]

 


타입 변환을 해준다.

ByteTensor는 True, False 값을 가지는 Tensor다.

 


행렬을 합쳐준다.

 


Concatenate와 비슷하지만 사용하기에 조금더 편하다.

위와 같이 cat을 사용하려면 unsqueeze를 통해 차원을 늘려준 후에 수행해줘야 한다.

 


torch.ones_like(x): x와 같은 크기이고 1로 가득 채운 행렬을 생성

torch.zeros_like(x): x와 같은 크기이고 0으로 가득 채운 행렬을 생성

 


x.mul(2.): 연산을 위해 새로운 메모리 공간을 활용

x.mul_(2.): 연산을 위해 기존 메모리 공간을 활용

 

 


출처:

https://www.youtube.com/watch?v=XkqdNaNQGx8&list=PLQ28Nx3M4JrhkqBVIXg-i5_CVVoS1UzAv&index=3 

 

'Deep Learning > Pytorch' 카테고리의 다른 글

07_Pytorch_Logistic_Regression  (0) 2021.08.18
05_Pytorch_nn.Module  (0) 2021.08.13
04_Pytorch_Multivariate_Linear_Regression  (0) 2021.08.12
03_Pytorch_Linear_Regression  (0) 2021.08.12
01_Pytorch Shape and Calculation  (0) 2021.08.09

  • 차원이 없는 값: 스칼라
  • 1D: Vector
  • 2D: Matrix
  • 3D: Tensor

 

  • 2D Tensor |t| = (batch_size, dim)
  • batch_size: 세로
  • dim: 가로

 

  • 3D Tensor |t| = (batch_size, width = length, height = dim)
  • batch_size: 세로
  • width = length: 가로
  • height = dim: 깊이

 


  • torch.FloatTensor: 차원 생성
  • t.dim(): 차원수
  • t.shape(): 차원의 형태

 

2D FloatTensor

 


FloatTensor 연산

마지막 부분의

m1 = 1x2는 [[1, 2], [1, 2]]로,

m2 = 2x1은 [[3, 3], [4, 4]]로,

바뀐다.

 


  • dim = 0: 행 기준
  • dim = 1: 열 기준

 

 

 


출처:

https://www.youtube.com/watch?v=St7EhvnFi6c&list=PLQ28Nx3M4JrhkqBVIXg-i5_CVVoS1UzAv&index=2 

 

'Deep Learning > Pytorch' 카테고리의 다른 글

07_Pytorch_Logistic_Regression  (0) 2021.08.18
05_Pytorch_nn.Module  (0) 2021.08.13
04_Pytorch_Multivariate_Linear_Regression  (0) 2021.08.12
03_Pytorch_Linear_Regression  (0) 2021.08.12
02_Pytorch Shape and Calculation  (0) 2021.08.10
  1. residual vs highway
  2. Inception-ResNet-V2, ResneXt 논문 보기
  3. 모두의딥러닝 김성훈 교수님 강의
  4. Batch Nomalization 작성해보기

 

  1. WebRTC

https://alnova2.tistory.com/category/Computer/webrtc?page=14 

 

'Computer/webrtc' 카테고리의 글 목록 (14 Page)

단지 꿈이어도 좋아..

alnova2.tistory.com

https://github.com/vmolsa/libcrtc

https://gh402.tistory.com/45

 

[WebRTC] NAT, ICE, STUN, TURN 이란? ( WebRTC를 이해하기 위해 필요한 지식들)

NAT(Network Address Translation) '나'는 누구인지 '이름'으로 구별할 수 있듯, 각 기기에도 자신만의 이름이 있다. 그것이 바로 IP이고 이 IP는 고정IP, 유동IP 로 나뉘어서 실제 고유의 값일 수도 있고 아닐

gh402.tistory.com

 

'Deep Learning' 카테고리의 다른 글

Resnet 공부 및 구현하기 - (작성중)  (0) 2021.06.11
환영합니다!  (0) 2021.06.11

1. Makefile 이란?

 - make 명령어에게 무엇을 할 것인가를 설명하는 파일. 즉, make에게 어떤 프로그램을 컴파일하고 링크하는 방법

 

 

2. Makefile 규칙

target ... : dependencies ...

             command

             ...

             ...

 

- target : 생성되는 파일 이름

- dependency : target을 만들기 위해 입력으로 사용되는 파일

- command : make가 실행하는 액션

 

Example)

더보기
Example

 

'edit' 이라고 불리는 실행 파일 하나가, 8개의 C 소스와 3개의 헤더 파일들에 의존하는 makefile.

 

  • 'edit' 실행 파일을 만들기 위해 makefile을 쓰기 위해서는 다음과 같이 입력한다: make
  • makefile을 사용해서 실행 파일과 모든 오브젝트 파일들을 삭제하려면 다음과 같이 입력한다: make clean

 

 

3. 그 외 규칙

  • wildcard : 해당 조건에 맞는 파일들을 뽑는다.

Example)

더보기

SRC_DIR = ./src

SRCS = $(wildcard $(SRC_DIR)/*.cc))

 

경우, ./src/foo.cc     ./src/bar.cc     ./scr/main.cc

 

 

  • notdir : 앞에 오는 경로를 날려버리고 파일 이름만 깔끔하게 추출해준다.

Example)

더보기

SRC_DIR = ./src

SRCS = $(notdir $(wildcard $(SRC_DIR)/*.cc)))

 

경우, foo.cc     bar.cc     main.cc

 

 

출처:

https://modoocode.com/311

 

씹어먹는 C++ - <19 - 1. Make 사용 가이드 (Makefile 만들기)>

 

modoocode.com

http://korea.gnu.org/manual/4check/make-3.77/ko/make_2.html#SEC5

 

GNU make - Makefile 소개(An Introduction to Makefiles)

Go to the first, previous, next, last section, table of contents. 여러분은 makefile이라고 불리는, make에게 무엇을 할 것인가를 말하는, 파일이 필요하다. 대개 makefile은 make에게 어떤 프로그램을 컴파일하고 링크

korea.gnu.org

https://www.tuwlab.com/ece/27193

 

[Make 튜토리얼] Makefile 예제와 작성 방법 및 기본 패턴 - ECE - TUWLAB

리눅스 환경에서 소스코드를 다운받아서 수동으로 프로그램 설치를 해 보신 분들은 다음 세 줄의 명령어에 매우 익숙할 것입니다. ./configure make sudo make install 근래에는 make 외에 다른 빌드툴들이

www.tuwlab.com

 

+ Recent posts