Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 공공데이터
- Codeforces Round #802 (Div. 2)
- 이론
- Codeup
- GROUP BY 절
- programmers
- 기초100제
- 기본
- SELECT 절
- 백준
- Java11
- 명품 자바 프로그래밍
- Python
- 개념
- 코딩테스트
- SQLD / SQLP
- pypy3
- 헤드퍼스트 디자인패턴
- level1
- HAVING 절
- JAVA 11
- 단계별로 풀어보기
- 기초
- 응용
- 자바
- 파이썬
- BOJ
- Python 3
- baekjoon
- java
Archives
- Today
- Total
Development Project
[ 2021 NIPA AI - 응용 ] 2. 딥러닝 시작하기 (01~05) + α 본문
01 퍼셉트론(Perceptron)
- 단층 퍼셉트론
- 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘
- 입력층과 출력층만 존재
- 각 입력값이 가중치와 곱해져 인공뉴런에 보내지고, 각 입력값과 그에 해당되는 가중치 곱의 전체 합이 임계치(threshold)를 넘으면 종착지에 있는 인공뉴런은 출력 신호로서 1을 출력하고 아니라면 0을 출력함
- 퍼셉트론은 선형 분류기로써 데이터 분류 가능함
- 다층 퍼셉트론 (Multi Layer Perceptron, MLP)
- 단층 퍼셉트론을 여러 개 쌓은 것
- 입력층과 출력층 사이의 모든 Layer를 Hidden Layer라 하는데, 히든층이 많아진다면 Deep Learning이라 함
- 최종 출력값과 실제값의 오차가 최소화되도록 가중치와 바이어스를 계산하여 결정함
02 텐서플로우와 신경망
- 딥러닝 모델
- 구성 요소
- 학습 방법
- 예측값과 실제값 간의 오차값을 최소화하기 위해 오차값을 최소화하는 모델의 인자를 찾는 알고리즘 적용
- Loss Function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘을 적용
- 예측값 구하기
- 가중치 업데이트 과정
- 학습용 Feature 데이터를 입력하여 예측값 구하기 (순전파)
- 예측값과 실제값 사이의 오차 구하기 (Loss함수)
- Loss를 줄일 수 있는 가중치 업데이트 하기
- 1~3번 반복으로 Loss를 최소로 하는 가중치 얻기
- 위 과정을 수행하여 가중치들을 업데이트 할 수 있으며, 이를 반복하여 Loss Function을 제일 작게 만드는 가중치를 구함
- 순전파 (Forward Propagation) : 입력 값을 바탕으로 출력 값을 계산하는 과정
- 순전파를 사용하면 예측값과 실제값 간의 오차값을 구하여 Loss Function을 구할 수 있음
- 역전파 (Back Propagation)
- Input값과 Output값을 알고 있는 상태에서 신경망을 학습시키는 방법
- 가중치 업데이트 과정
- 구현 순서
- 데이터 전 처리하기
- Tensorflow 딥러닝 모델
- Tensor 형태의 데이터(다차원 배열)로 변환
-
# pandas를 사용하여 데이터 불러오기 df = pd.read.csv('data.csv') feature = df.drop(columns=['label']) label = df['label'] # tensor형태로 데이터 변환 dataset = tf.data.Dataset.from_tensor_slices((feature.values, label.values))
- Tensorflow에서 사용하는 객체인 Tensor 형태를 입력받아야 하므로 변환
-
- 데이터의 세분화 작업
- Epoch
- 전체 데이터를 반복적으로 학습하는 횟수
- 한번의 학습만으로 모델이 완성되었다고 보기 어려우므로, 반복적인 학습을 통해 높은 정확도를 가지는 모델을 만들 수 있음
- Epoch횟수를 너무 크게하면 과적합(Overfitting)이 발생 가능
- Batch
-
dataset = dataset.batch(32)
- 한번에 학습할 데이터의 수
- 전체 데이터를 메인메모리에 적재하는 것은 어려우므로, 데이터를 잘게 나눈어서 메모리에 잭재시켜 학습
- Batch를 너무 작게하면 Iteration이 증가하여 학습시간이 오래소모
-
- Iteration
- 한 Epoch에서 Batch를 학습하는 횟수, Epoch를 나누어서 실행하는 횟수
- Gradient의 이동 폭이 커서 Global Minimum을 지나칠 수 있으므로 Gradient를 조금씩 반복적으로 이동하게 하는 역할
- Tensor 형태의 데이터(다차원 배열)로 변환
- Tensorflow 딥러닝 모델
- 딥러닝 모델 구축하기
- Keras : 텐서플로우의 패키지로 제공되는 고수준 API로, 딥러닝 모델을 간단하고 빠르게 구현 가능
- 모델 구축 코드 예_1
-
# 모델 클래스 객체 생성 model = tf.keras.models.Sequential([ # 모델의 각 Layer 구성 tf.keras.layers.Dense(10, input_dim = 2, activation = 'sigmoid'), #2개의 입력변수, 10개의 노드 tf.keras.layers.Dense(10, activation = 'sigmoid'), #10개의 노드 tf.keras.layers.Dense(10, activation = 'sigmoid'), #1개의 노드 ])
- 첫번째 즉, Input Layer는 입력 형태에 대한 정보가 필요 ( input_shape / input_dim 인자 )
-
- 모델 구축 코드 예_2
-
model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(10, input_dim = 2, activation = 'sigmoid')) model.add(tf.keras.layers.Dense(10, activation = 'sigmoid')) model.add(tf.keras.layers.Dense(1, activation = 'sigmoid'))
-
- 모델 구축 코드 예_1
- Keras : 텐서플로우의 패키지로 제공되는 고수준 API로, 딥러닝 모델을 간단하고 빠르게 구현 가능
- 모델 학습시키기
-
# 모델 학습 방식을 설정 # MSE(손실 함수)를 loss로 설정, 최적화 방식은 SGD 사용 model.compile(loss='mean_squared_error', optimizer='SGD') # 모델을 학습 = dataset에 저장된 데이터를 입력하고, epochs를 100으로 설정하고 학습 # x : 학습 데이터 / y : 학습 데이터의 label model.fit(dataset, epochs=100)
-
- 평가 및 예측하기
-
# MSE를 loss로 설정, 최적화 방식은 SGD 사용 model.compile(loss='mean_squared_error', optimizer='SGD') # dataset에 저장된 데이터를 입력하고, epochs를 100으로 설정하고 학습 model.fit(dataset, epochs=100) # 모델 평가 및 예측하기 model.evaluate(X_test, Y_test) predicted_labels_test = model.predict(X_test)
-
- 데이터 전 처리하기
- 구성 요소
03 다양한 신경망
- 이미지 처리
- 데이터 전 처리하기
- 모두 같은 크기를 갖는 이미지로 통일
- 가로 / 세로 / 픽셀 사이즈를 표현하는 해상도 통일
- 색을 표현하는 방식 통일 (RGB, HSV, Gray-scale, Binary, ...)
- 모두 같은 크기를 갖는 이미지로 통일
- 딥러닝 모델 구축하기
- 합성곱 신경망(Convolution Neural Network, CNN)
- 개념
- 작은 필터를 순환시키는 방식 - 이미지의 패턴이 아닌 특징을 중점적으로 인식함
- 구조
- 입력 이미지의 특징을 추출, 분류하는 과정으로 동작
- Convolution Layer
- 이미지에서 어떠한 특징이 있는지를 구하는 과정으로, 필터가 이미지를 이동하며 새로운 이미지(피쳐맵)을 생성
- Pooling Layer
- 이미지 왜곡의 영향(노이즈)를 축소하는 과정
- Fully Connected Layer
- 추출된 특징을 사용하여 이미지를 분류 (Softmax 활성화 함수 사용)
- Convolution Layer
- 입력 이미지의 특징을 추출, 분류하는 과정으로 동작
- 개념
- 합성곱 신경망(Convolution Neural Network, CNN)
- 데이터 전 처리하기
- 자연어 처리
- 데이터 전 처리하기
- 오류 교정
- 자연어 문장의 스펠링 체크 및 띄어쓰기 오류 교정
- 토큰화
- 문장을 토큰(어절, 단어 등으로 목적에 따라 다르게 정의)으로 나눔
- 불용어 제거
- 불필요한 단어를 제거
- 토큰 시퀀스
- Bag of Words에서 단어에 해당되는 인덱스로 변환 / 모든 문장의 길이를 맞추기 위해 Padding 수행
-
- Bag of Words
- 자연어 데이터에 속해있는 단어들의 가방 구성
- Bag of Words
- 오류 교정
- 딥러닝 모델 구축하기
- 순환 신경망(Recurrent Neural Network, RNN)
- 기존 퍼셉트론 계산과 비슷하게 X입력 데이터를 받아 Y를 출력하지만 출력값을 두 갈래로 나누어 신경망에게 기억하는 기능을 부여하므로, 토큰 간의 순서와 관계를 적용할 수 있는 모델
- 임베딩 => RNN => 활성함수
- 임베딩은 토큰의 특징을 찾아내고, RNN이 전 토큰의 영향을 받으며 학습함
- 순환 신경망(Recurrent Neural Network, RNN)
- 데이터 전 처리하기
'AI > Edu' 카테고리의 다른 글
[ 2021 NIPA AI - 기본 ] 3. 공공데이터를 활용한 파이썬 데이터분석 프로젝트 - 2. 지하철 승하차 인원 정보를 활용한 역별 혼잡도 분석 (0) | 2021.12.16 |
---|---|
[ 2021 NIPA AI - 기본 ] 3. 공공데이터를 활용한 파이썬 데이터분석 프로젝트 - 1. 코로나 데이터 분석하기 (0) | 2021.12.16 |
[ 2021 NIPA AI - 응용 ] 1. 머신러닝 시작하기 (01~05) + α (0) | 2021.12.11 |
[ 2021 NIPA AI - 기본 ] 2. 데이터 분석을 위한 라이브러리 (01~05) + α (0) | 2021.10.22 |
[ 2021 NIPA AI - 기본 ] 1. 핵심 파이썬 기초 프로그래밍 (01~05) + α (0) | 2021.10.19 |
Comments