일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Pytorch로 시작하는 딥러닝 입문
- NUCLEO board
- DH parameter
- PUMA 560
- 딥러닝
- 6dof
- custom cnn
- visdom
- mnist
- 로보틱스 입문
- 파이토치로 시작하는 딥러닝 기초
- regression
- softmax
- pytorch
- DeepLearning
- dynamixel
- pytorch visdom
- Robot arm
- IMU sensor
- Python
- 파이토치
- Robotics
- Numpy
- 로보틱스입문
- 6축 다관절
- 6자유도 로봇팔
- Introduction to Robotics: Mechanics and Control by John J Craig
- boostcourse
- nucleo-f401re
- RobotArm
- Today
- Total
슬.공.생
BoostCourse(DL)(week2)-Logistic Regression 본문
BoostCourse(DL)(week2)-Logistic Regression
AGT (goh9510@naver.com) 2022. 8. 1. 18:18본 포스팅은 부스트 코스의 [ 파이토치로 시작하는 딥러닝 기초 ] 와 [ Pytorch로 시작하는 딥러닝 입문 ] 의 내용을 통해 학습한 내용입니다.
파이토치로 시작하는 딥러닝 기초
부스트코스 무료 강의
www.boostcourse.org
PyTorch로 시작하는 딥 러닝 입문
이 책은 딥 러닝 프레임워크 PyTorch를 사용하여 딥 러닝에 입문하는 것을 목표로 합니다. 이 책은 2019년에 작성된 책으로 비영리적 목적으로 작성되어 출판 ...
wikidocs.net
로지스틱 회귀란?
로지스틱(Logistic) 회귀는 이전 선형(linear) 회귀에서 사용했었던 예측 함수(hypothesis)의 형태를 바꾼 것으로 S자 형태의 곡선 성분이 포함되어 있는 함수를 예측 함수로서 사용한 회귀 알고리즘에 일종이다.
선형 회귀와 마찬가지로 최적의 W (Weight)와 b(bias)를 찾아 실제 값 y와의 오차가 가장 적은 hypothesis를 구성하는 것이 목표이다.
sigmoid 함수는 W,b에 따라 형태가 달라지는데, W가 클수록 경사가 급격해지며, b가 큰 경우에는 곡선부분이 음수쪽으로 이동하게 된다.
sigmoid함수의 경우 분류에도 활용이 된다
0, 1 사이의 출력을 가지는 특성을 활용하여 임계값을 정하고 이상, 이하 로 나눠 이진 분류(Binary Classification)에 사용하기도 한다.
sigmoid함수를 통해 cost function을 정의 할 경우 기존의 선형회귀와는 달리 아래 그림과같은 비볼록 형상(non-convex)이 나오기 때문에 경사 하강법에 의한 오차 최소화가 원활하게 진행될 수 없다는 문제점이 있다.
따라서 아래처럼 새롭게 cost함수를 정의하여 사용하게 된다.
위의 cost function에서는 실제 값 y 를 통해서 우변의 좌우측 성분을 조절하 여 cost를 계산하게 된다. 이 cost함수의 W, b 에 대한 미분과정을 반복하여 W,b를 찿아간다.
아래는 sigmoid함수로 Logistic Regerssion을 진행한 결과이다.
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
x_data = [[1, 2], [2, 3], [3, 1], [4, 3], [5, 3], [6, 2]]
y_data = [[0], [0], [0], [1], [1], [1]]
x_train = torch.FloatTensor(x_data)
y_train = torch.FloatTensor(y_data)
W = torch.zeros((2, 1), requires_grad=True)
b = torch.zeros((1), requires_grad=True)
- x,y data를 Tensor 형태로 바꿔 학습을 준비한다.
- W, b의 형태를 지정하고 미분과정에서 계속 수정을 거듭할 수 있도록 requires_grad=True 로 지정한다.
경사하강법(SGD)로 optimizer를 구성하고 sigmoid 형태로 hypothesis의 cost를 계산하여 학습을 진행한다.
optimizer = optim.SGD([W, b], lr = 1)
nb_epochs = 900
for epoch in range(nb_epochs+1):
hypothesis = torch.sigmoid(x_train.matmul(W)+b)
cost = -( (y_train)*torch.log(hypothesis) +
(1 - y_train)*torch.log(1 - hypothesis)).mean()
## cost = F.binary_cross_entropy(hypothesis, y_train)
optimizer.zero_grad()
cost.backward()
optimizer.step()
# F.binary_cross_entropy(hypothesis, y_train)
if epoch % 2 == 0 :
print('Epoch {:4d}/{} Cost: {:.6f}'.format(
epoch, nb_epochs, cost.item()
))
print(hypothesis)
prediction = hypothesis >= torch.FloatTensor([0.5])
print(prediction)
print(W)
print(b)
'study > DeepLearning' 카테고리의 다른 글
BoostCourse(DL)(week2)-Softmax Regression_1 (0) | 2022.08.02 |
---|---|
BoostCourse(DL)(week2)-Sequential model(class) (0) | 2022.08.01 |
BoostCourse(DL)(week1)-Mini Batch Gradient Descent (0) | 2022.07.30 |
BoostCourse(DL)(week1)-class 기반 모델 구현(보충) (0) | 2022.07.30 |
BoostCourse(DL)(week1)-Multi_Linear_Regerssion (0) | 2022.07.25 |