일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리눅스
- 셀레니움
- Reference Type
- spring
- 자바
- 백준
- BFS
- Binary Search
- selenium
- Mac
- X.org
- Entity Set
- External Scheme
- python
- OOP
- Inheritance
- Polymolphism
- literal
- 리눅스 마스터 1급
- Operator
- X윈도우
- descriptive statistics
- Physical Scheme
- Entity
- dbms
- preprocessing
- Class
- Unity
- systemd
- Java
- Today
- Total
목록AI (10)
Byeol Lo
우선 신경망에서 가장 중요한 input data가 있어야 학습할 수 있다. 주어진 훈련 데이터를 통해 출력 데이터로 변환시키는 알고리즘을 학습한다. 알고리즘을 크게 본다면 순서는 다음과 같다. Data Preparation Data Visualization Data Pre-Processing Data Load Model Architecture Hyper Parameter Model Train Model Valid Model Test Model Deploy 앞의 두 파트는 여기서 다루지 않겠다. 이 글은 오직 Data Pre-processing부터 다루며 또한 이 글은 numpy에 대한 기본적인 지식이 어느 정도 필요해야 한다. 또한 필요할 때마다 해당되는 팁이나 지식을 그때그때 다룰 것이다. 토치는 Te..
Pytorch에서 프로젝트를 수행하면서 이미지 처리를 했었는데, 회고록의 느낌으로 포스트를 남긴다. 다른 분들에게도 다음과 같은 오류들이 있을 수 있기 때문에 그 분들에게 도움이 되었으면 한다. Data Download & Pre-Processing 대용량의 데이터를 다운 받을 때 혹은 전처리를 할 때는 다음 multi-processing을 써서 다운로드 받는게 좋다. 환경마다 다 다른 cpu 개수를 가지고 논리 프로세서 개수 또한 지원이 다르기에 다음과 같은 코드를 활용하자. python의 multiprocessing은 따로 공부를 해서 이용하는 것을 추천한다. # Python 3.8.12 import multiprocessing MULTIPROCESSING_WORKERS = multiprocessin..
이때 동안 했던 것들을 파이썬을 통해 복습한다. 벡터와 행렬 기본적으로 numpy를 통해 연산을 수행할 수 있다. import numpy as np x = np.array([1,2,3]) print(x.__class__) # 클래스명 출력 print(x.shape) # x의 형상, shape 출력 print(x.ndim) # 차원의 깊이 출력 W = np.array([[1,2,3], [4,5,6]]) print(W.shape) print(W.ndim) 보통 x와 같이 하나의 row, column등으로 이루어진 것은 수학이나, 딥러닝의 많은 분야에서 "열벡터" 방식을 선호한다. 하지만 프로그래밍에 있어서 해당 방식은 불편하기 때문에 편의를 고려해 행벡터로 다룬다고 한다(브로드 캐스팅). 행렬의 Elimen..
A Arbitrary 임의의 Acyclic 비순환으로 한쪽으로 흐르는 이라는 의미이다. B C Compact Subset 유계(bounded)이면서, 완전성(Completeness)를 가지는 부분집합을 의미한다. Contour 등고선 D Depth Correction 깊이 보정이라는 의미를 가지고, 3D 공간에서 촬영된 영상이나 이미지의 깊이 정보를 보정하는 과정을 의미한다. Deep neural network 깊은 신경망은 shallow neural network가 아닌 신경망을 말한다. 즉, 히든레이어가 2개 이상이다. Degree of Freedom DoF라고도 하며, 한 시스템 내에서 독립적으로 움직일 수 있는 방향 또는 축의 수를 의미함. 예를 들어 xyz좌표계는 축이 3개이므로 3 DoF를 가..
기본적으로 신경망에서 Affine Layer - Activation Layer(ReLU) 등의 반복되는 연결들을 많이 보았다. 하지만 이번에는 Affine Layer을 다른 연산을 수행할 수 있는 계층으로 바꿔서 수행할 수 있다. CNN 구조 Conv ReLU Pooling - 선택사항 지금까지 본 신경망들은 계층 간의 노드들이 전부 연결되어 있는 완전연결 신경망(Fully-connected, 전결합)임을 알았다. 완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU 계층 혹은 Sigmoid 계층이 이어졌는데, CNN은 이렇게 이어지는게 아닌 위의 세 항목들로 이어진다. 여기서 Conv를 "합성곱 계층", Pooling을 "풀링 계층"이라고 부른다. 따라서 Affine-ReLU로 연결되었..
다음은 머신러닝에서 자주 다룰 개념들이다. 최적화(Optimization) 하이퍼 파라미터(Hyper Parameter) 오버피팅(Overfitting) 위 세 주제에 대해 다뤄지는 기법들을 소개한다. 우선 Optimization는 데이터의 분포에 맞게 신경망을 학습시키는 과정을 말한다. 다음은 신경망의 가중치들을 업데이트하는 수식이다. 최적화를 하는 방법에도 많은 기법들이 소개되는데, 여기서 다뤘던 것은 SGD였다. 확률적 경사하강법(SGD : Stocastic Gradient Descent) 여기서 에타는 학습률(learning rate), 학습률과 곱해진 것은 여태 편미분을 통해 계산했던 역전파 값이다. 이 둘을 통해 가중치를 업데이트 한다. 여기서 Loss Function에 따라 신경망에게 피드백..
경사하강법을 쓰기 위해서 손실 함수로부터 수정해야하는 기준치를 얻을 수 있다. 하지만 이 수치를 노드들에 어떻게 적용시킬지 의문이 생길 수 있고, 이렇게 노드들을 데이터들에 적용하는 단계를 오차역전파(Back Propagation)이라고 한다. 다음 예제를 보자. x+y = z라는 결과를 내뱉는 연산이다. 이때 x에 대한 z의 편미분과 y에 대한 편미분이 각각 1임을 알 수 있다. 이런 연산에서 Loss Function에서 얻은 값에 대해 편미분을 수행하는데, z의 결과를 도출하는 노드에 대해서는 해당 노드의 가중치에 dL/dz의 가중치를 넣게 된다. 즉, Loss Function을 계산하는데에 직접 맞닿아 있는 출력층은 dL/dz만 계산하면 된다. 하지만 그 전의 층으로 갈 때의 가중치는 x와 y의 결..
일반적으로 데이터 분석을 위한 모델링은 다음과 같은 과정을 가진다. 데이터 수집 → 데이터 로딩 → 정규화/전처리 → 데이터 학습 → 테스트 데이터 추론 → 정확성 평가 → 모델 전개 이 과정에서 자주 쓰이는 용어들을 살펴볼 것이다. Batch Process(배치 처리) 테스트 데이터 하나하나를 추론(propagation)할 때는 데이터 하나하나를 쓰다보니 매우 느릴 것이다. 일반적으로 파일 입출력을 처리할 때 파일을 가져올때 하나하나 데이터를 가져오는 것보다 적재할 수 있는 한의 양만큼 가져와 처리하는 것이 더 효율적일 것이다. 이를 위해 배치 처리 Batch Process 라는 것이 나왔다. 배치 처리라는 것은 대량의 데이터를 행렬 연산을 통해 처리 시간을 대폭 줄여주는 것이 가장 큰 이점인데, 수치..
밑바닥부터 시작하는 딥러닝1 을 읽으면서 하나하나 정리하면서 글을 써내려갈 생각이다. 파이썬, 파이썬의 numpy, matplotlib 등의 라이브러리 등을 기본적으로 다운 받아 실습을 무조건 할 수 있도록 환경을 갖추도록 한다. 퍼셉트론(Perceptron)은 "다수의 신호를 입력으로 받아 하나의 신호를 출력하는 체계"이다. 따라서 최종적으로 신호가 흐른다, 안흐른다의 상태를 가지게 된다. 해당 퍼셉트론을 통해 X1에서 w1로의 가중치(저항)가 곱해져 y로 신호가 전달된다. 따라서 y에서 받은 두 신호의 어떤 연산을 통해 Y에 신호가 흐를지, 안흐를지 정할 수 있다. 여기선 간단하게 x1w1 + x2w2 + b 가 어떤 값보다 작으면 0, 크면 1의 신호를 갖도록 할 수도 있고 다른 연산을 써도 된다...
unsupervised learning 중에 k-means 알고리즘을 읽고 구현해보았다. 1차 시도 import numpy as np import matplotlib.pyplot as plt # 데이터들 data = np.array([ [-1, 0], [0, 0], [2, 2], [3, 2], [3, 3], [-1, -1] ], dtype=np.float32) # initial center center0 = data[0] center1 = data[1] iter = 3 for _ in range(1, iter +1) : res = np.stack( (np.sum((data - center0)**2, axis=1), np.sum((data - center1)**2, axis=1)), axis=0 ) arg..