본문 바로가기
반응형

딥러닝13

[PyTorch] 실제 데이터를 텐서로 표현해보기 이미지 파일 로딩 이미지는 여러 파일 포맷으로 저장될 수 있지만 다행히도 파이썬에서는 다양한 방식으로 이미지를 로딩할 수 있다. 코드의 img는 너비와 높이에 해당하는 두 개의 공간 정보와 색 공간을 포함하는 3차원 배열 같은 넘퍼이 객체다. 현재 이미지는 H * W * C로 되어있지만 파이토치 모듈은 텐서가 C * H * W, 즉 채널, 높이, 너비 순으로 배치되어야 한다. 레이아웃 변경하기 차원을 변경하려면 텐서의 permute 메소드를 사용한다. 앞에서 얻은 H * W * C 입력 텐서에 대해 채널2와 채널0 그리고 채널1 순으로 나열되도록 변경하면 적절한 레이아웃이 된다. 이 연산은 텐서 복사본을 만들지 않는다는 점에 유의해야 한다. out은 img 저장 공간과 동일하며 단순히 텐서 레벨에서 크기.. 2023. 4. 24.
[파이썬 딥러닝] 활성화 함수 계층 구현하기 ReLU 계층 활성화 함수로 사용되는 ReLU 수식은 다음과 같습니다. x에 대한 y의 미분은 다음과 같습니다. 순전파 때의 입력인 x가 0보다 크면 역전파는 상류의 값을 그대로 하류로 흘립니다. 반면, 순전파 때 x가 0 이하면 역전파 때는 하류로 신호를 보내지 않습니다.(0을 보냅니다.) 계산 그래프로는 다음과 같습니다. class Relu: def __init__(self): self.mask = None def forward(self, x): self.mask = (x 2023. 3. 29.
[파이썬 딥러닝]순전파와 역전파 기초 덧셈 노드의 순전파와 역전파 순전파는 우리가 알고 있는 덧셈입니다. 위 그림을 보면 덧셈노드를 통해 더하게 됩니다. 따라서 순전파를 통과하면 z = x + y라는 식이 나옵니다. 이 식을 편미분을 하게되면 z를 x에 대해 미분해도 y를 통해 미분해도 모두 1이 됩니다. 따라서 역전파때 상류에서 전해진 미분값을 그대로 하류로 흘리게 됩니다. 곱셈 노드의 순전파와 역전파 곱셈 노드도 순전파는 덧셈 노드와 크게 다르지 않습니다. 우리가 알고 있던 곱셈입니다. z = xy라는 식을 미분하면 z를 x에 대해 미분 했을대 y가 되고 z를 y에 대해 미분 했을때 x가 남게 됩니다. 따라서 곰셈의 역잔파에서는 입력 신호를 바꾼 값을 곱하여 흘려 보내줍니다. 때문에 곱셈의 역전파는 순방향 입력 신호의 값이 필요합니다. .. 2023. 3. 28.
[파이썬 딥러닝] 수치 미분 미분 미분이란? 한순간의 변화량을 표시한 것 수식 파이썬으로 구현한 미분 def numerical_diff(f, x): h = 1e-50 return (f(x + h) - f(x)) / h 그러나 이 방식은 반올림 오차 문제를 일으킵니다. 반올림 오차는 작은 값이 생략되어 최종 계산 결과에 오차를 생기게 합니다. import numpy as np np.float32(1e-50) [출력] 0.0 위와 같이 작은 값을 넣어 0으로되어 버리는 오차를 말합니다. 이를 개선하기 위해서 두가지 방법이 있습니다. 첫째로는 h를 10 ^ -4를 사용하여 컴퓨터로 계산하는데 문제가 되지 않도록 하는 방법입니다. 둘째로는 차분을 이용하는 방법입니다. 차분 '진정한 미분'은 x 위치의 함수의 기울기에 해당하지만, 이번 구현.. 2023. 3. 22.
[파이썬 딥러닝] 신경망 학습 학습 학습이란? 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 뜻한다. 훈련 데이터와 시험 데이터 기계 학습 문제는 데이터를 훈련 데이터(train data)와 시험 데이터(test data)로 나눠 학습과 실험을 수행하는 것이 일반적입니다. 우선 훈련 데이터만 사용하여 학습하면서 최적의 매개변수를 찾습니다. 그런 다음 시험 데이터를 사용하여 앞서 훈련한 모델의 실력을 평가하는 것입니다. 훈련 데이터와 시험 데이터를 나누는 이유는 우리가 원하는 모델은 범용적으로 사용할 수 있는 모델이기 때문입니다. 이 범용 능력을 제대로 평가하기 위해 훈련 데이터와 시험 데이터를 분리하는 것이죠. 범용 능력은 아직 보지 못한 데이터로도 문제를 올바르게 풀어내는 능력입니다. 이 범용 능력을 획득하는 .. 2023. 3. 16.
[파이썬 딥러닝] 퍼셉트론 퍼셉트론은 신경망의 기원이 되는 알고리즘 퍼셉트론이란? 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호(전류나 강물처험 흐름)를 출력합니다. 퍼셉트론의 신호는 0과 1의 두 가지 값만 가집니다. 그림의 원을 뉴런 혹은 노드라고 부릅니다. 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해지고 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력합니다. 이때 그 한계값을 임계값(Θ)이라고 합니다. 위 그림을 보면 입력 x1과 입력 x2가 들어온 후 각각의 가중치 w1과 w2와 곱해진 후 출력 y가 됩니다. 이때 y값이 일정 한계(Θ)를 넘어서면 1이 출력되고 넘지 못하면 0이 됩니다. 논리 회로 AND 게이트 AND게이트를 퍼셉트론으로 표현하면 위의 진리표대로 작동하도록 하는 w1.. 2022. 12. 21.
확률적 경사 하강법 확률적 경사 하강법 전체 샘플을 사용하지 않고 하나의 샘플을 훈련 세트에서 랜덤하게 골라 그 샘플에 대해서만 기울기를 계산하는 방법입니다. 샘플 데이터 셋에 대해서만 경사를 계산하므로, 매 반복에서 다뤄야 할 데이터 수가 매우 적어, 학습 속도가 매우 빠릅니다. 하나의 샘플만 대상으로 경사를 계산하므로, 메모리 소모량이 매우 낮으며, 매우 큰 훈련 데이터 셋이라 할지라도 학습 가능합니다다. 확흏적 경사 하강법에서 훈련 세트를 한 번 모두 사용하는 과정을 에포크(epoch)라고 부릅니다. 일반적으로 경사 하강법은 수십, 수백 번 이상 에포크를 수행합니다. 미니배치 경사 하강법 한 개씩 말고 무작위로 몇개의 샘플을 선택해서 경사를 따라 내려가는 방법입니다.\ 여러개의 샘플을 사용해 경사 하강법을 수행하는 방.. 2022. 8. 8.
로지스틱 회귀 - 다중 분류 https://glorychoi.tistory.com/entry/%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1-%ED%9A%8C%EA%B7%80Logistic-Regression 로지스틱 회귀(Logistic Regression) 로지스틱 회귀란? 로지스틱 회귀(logistic regression)는 이름은 회귀이지만 분류 모델입니다. 이 알고리즘은 선형 회귀와 동일하게 선형 방정식을 학습합니다. z = a * 무게 + b * 길이 + c * 대각선 + d * glorychoi.tistory.com 이진 분류와 다중 분류는 크게 다르지 않습니다. 여기에서도 LogisticRegression 클래스를 사용해 7개의 생선을 분류해 보면서 이진 분류와 차이점을 알아보겠습니다. 로지스틱 회귀.. 2022. 8. 5.
로지스틱 회귀(Logistic Regression) 로지스틱 회귀란? 로지스틱 회귀(logistic regression)는 이름은 회귀이지만 분류 모델입니다. 이 알고리즘은 선형 회귀와 동일하게 선형 방정식을 학습합니다. z = a * 무게 + b * 길이 + c * 대각선 + d *높이 + e * 두께 + f 시그모이드 함수 시그모이드 함수는 s자형 시그모이드 곡선을 갖는 수학 함수입니다. 일반적으로 단조 함수이며 1차 미분 그래프를 가지고 수평 점근선으로 수렴합니다. 우리가 원하는 것이 예측값이기 때문에 종속변수의 범위가 실수이지만 로지스틱 회귀 분석에서는 종속변수 y값이 0또는 1을 갖습니다. 그래서 우리는 주어진 데이터를 분류할 때 0인지 1인지 예측하는 모델을 만들어야합니다. 로지스틱 회귀로 이진 분류 수행하기 판다스를 임포트하여 데이터를 불러옵.. 2022. 8. 4.
선형 회귀 (Linear regression) 알고리즘 선형 회귀 선형 회귀는 널리 사용되는 대표적인 회귀 알고리즘입니다. 비교적 간단하고 성능이 뛰어나기 때문에 맨 처음 배우는 머신 러닝 알고리즘 중 하나입니다. 특성이 하나인 경우 어떤 직선을 학습하는 알고리즘입니다. 학습을 해야하는 직선은 특성을 가장 잘 나타낼 수 있는 직선으로 학습해야 하기 때문에 위와 같이 특성을 잘 타나내는 직선이 좋습니다. 사이킷런 선형 회귀 구현 사이킷런은 sklearn.linear_model 패키지 아래에 LinearRegression 클래스로 선형 회귀 알고리즘을 구현해 놓았습니다. LinearRegression 클래스에 훈련, 평가, 예측하는 메서드가 있기 때문에 우린 LinearRegression 클래스를 객체를 생성하여 사용하면 됩니다. LinearRegression .. 2022. 7. 26.
k_최근접 이웃 회귀 지도학습 알고리즘은 크게 분류와 회귀로 나뉘어집니다. 분류 : 샘플을 몇개의 클래스 중 하나로 분류하는 문제 회귀 : 클래스 중 하나로 분류하는 것이 아니라 임의의 어떤 숫자를 예측하는 문제 k- 최근접 이웃 분류 알고리즘 예측하려는 샘플에 가장 가까운 샘플 k개를 선택합니다. 샘플들의 클래스를 확인하여 다수 클래스를 새로운 샘플의 클래스로 예측합니다. k-최근접 이웃 회귀 알고리즘 예측하려는 샘플에 가장 가까운 샘플 k개를 선택합니다. 회귀이기 때문에 이웃한 샘플의 수치들의 평균을 구하여 타깃값을 결정한다. numpy를 임포트 하여 np.array를 통해 넘파이 배열로 데이터를 준비합니다. 이 데이터가 어떤 형태를 띠고 있는지 산점도를 그려보면 위와 같은 산점도를 그릴수 있습니다. 사이킷런 model_.. 2022. 7. 21.
데이터 전처리 넘파이로 데이터를 준비하는 방법은 여러가지 방법이 있지만 오늘은 column_stack 함수를 통해서 데이터를 준비합니다. 우선 넘파이를 사용하기 위해서 넘파이를 임폴트 해줍니다. column_stack 함수는 리스트를 일렬로 세운 다음 나란히 옆으로 붙여줍니다. 예를 들어 [1, 2, 3]과 [4, 5, 6] 두 리스트를 붙여 보겠습니다. fish_length와 fish_weight를 붙이기 위해서 column함수를 사용하겠습니다. 데이터가 잘 준비 되었습니다. 이제 타깃 데이터를 준비해야 하는데 타깃 데이터도 넘파이 패키지의 함수를 사용하면 쉽게 만들수 있습니다. 타깃 데이터를 만들기 위해서 사용할 함수는 np.ones()와 np.zeros()함수입니다. 이 두 함수는 각각 원하는 개수의 1과 0을 .. 2022. 7. 21.
머신 러닝의 훈련 세트와 테스트 세트 https://glorychoi.tistory.com/entry/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EB%94%A5%EB%9F%AC%EB%8B%9D 혼자 공부하는 머신러닝+딥러닝 생선 분류 문제 *도미와 빙어 구분 각 도미와 빙어의 특징을 특성이라고 한다. 아래 설명은 두 가지 특징(길이, 무게)를 사용하여 설명한다. 도미 데이터 준비 산점도 길이를 x축으로 하고 무게를 glorychoi.tistory.com 생성 분류 문제를 공부했을때 머신러닝 프로그램에서는 문제점이 존재했는데 그 문제점은 도미 35마리와 빙어 14마리를 모두 저장하고 맞추는 것이다. 오늘 공부를 통해 이 .. 2022. 7. 11.
반응형