일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- conda base 활성화
- 3000 port kill
- conda base 기본 설정
- 실행중인 포트 죽이기
- conda 가상환경 설정 오류
- time wait port kill
- conda 기초 설정
- 오블완
- 티스토리챌린지
- window netstat time wait 제거
- 려려
- Today
- Total
모도리는 공부중
21.02.15. 딥러닝 - 주피터 노트북 환경설정, 이론(뉴런, 시냅스, …), AND·OR·XOR논리 본문
21.02.15. 딥러닝 - 주피터 노트북 환경설정, 이론(뉴런, 시냅스, …), AND·OR·XOR논리
공부하는 모도리 2021. 2. 15. 20:04신경망 = 선형회귀 + Rogistic Regression
신경망은 굉장히 많은 수의 w*b가 있다. 이러한 문제로 딥러닝은 과적합에 자주 걸리는 문제점이 발생한다.
create를 눌렀을 때 3.8만 뜬다면
update index를 눌러서 업데이트를 해준다.
버전을 3.6으로 맞추고 이름을 deep01로 설정해서 create. 설치하는데 시간이 걸리므로 이 작업을 선행 후 수업을 진행하겠습니다.
not installed로 바꾸고 search packages에 다음을 입력하여 설치해준다.
jupyter numpy pandas matplotlib seaborn scikit-learn opencv 3개 라이브러리 |
apply를 적용하면 내가 선택한 9개가 상단에 뜬다. 확인 후 한 번 더 apply.
설치가 끝났다면 아래의 3개를 추가로 설치한다.
tensorflow-gpu cuDnn cudatoolkit |
tensorflow의 경우 설치하는데 시간이 오래 걸리는 편이다. 설치 후 installed로 구분을 바꿔서 잘 설치되었는지 확인해보고, HOME을 눌러서 주피터 노트북을 실행한다. 이때,
Applications on이 내가 설정한 값으로 잘 바뀌어있는지를 확인 후 실행하면 된다.
다시 수업으로 이어간다.
GAN (적대적신경망 , Generative Adversarial Networks)
전이학습 (Transfer Learning)
심층 강화 학습 (Deep Reinforcement Learning)
강화학습은 그때 그때의 데이터를 가지고 와서 최적의 결과를 만들어내는 작업을 말한다.
그때그때 발생하는 환경변수를 사용하다보니 환경변수가 너무 많이 발생한다. 그래서 나온 것이 바로 심층강화학습. 딥러닝을 돌려서 환경변수에 있는 중요한 특성을 뽑아내어 사용하는 방식이다.
캡슐망 (Capsule Network)
XAI 신경망을 설명가능하게 만들자~며 나온 이론으로 이것도 현재 연구중이라고 한다.
딥러닝 (Deep Learning)
- 사람의 신경망을 모방하여 기계가 병렬적 다층 구조를 통해 학습하도록 만든 기술
사람은 대상을 판단할 때 경계가 느슨하여 추상적이고 모호하게 표현을 한다. 이에 반해 기계는 판단하는 기준이 명확하게 정해져 있어서 같은 대상을 보고 판단할 때도 정확한 수치로 나타낸다.
뉴런의 구조 - 성인의 뇌는 850억 개의 뉴런과 10^(14) ~ 10^(15)개의 시냅스로 이루어져 있다.
판단이 오늘 다르고 내일 또 다르게 나타나는 이유는 각각의 뉴런이 판단을 다르게 하기 때문이라고..??? 음..????
퍼셉트론 (Perceptron)
- 1957 년 프랑크 로젠블라트에 의해 고안
- 신경세포는 수상돌기(dendrite)를 통해 다른 신경세포로부터 입력 신호를 받음
→ 신경 세포체 (cell body) 에서 정보 연산을 처리
→ 축삭(axon) 을 통해 처리된 정보를 다른 신경세포로 전달 - 신경세포는 시냅스 라는 가중 연결자 (weighted connector) 로 여러 층의 신경망을 구성
- 신경세포체는 입력 신호들의 합을 구함
→ 임계치가 되면 축삭이 활성화되어 스파크를 일으킴
→ 다른 신경세포로 전기 신호를 전달 - 이 특성을 모방한 것이 인공 신경망 (ANN : Artificial Neural Network)
인간의 뉴런을 하나를 노드(인공 뉴런)로 가상화하고 각 노드의 특성 가중치를 다르게 설정하여 동일한 입력에 대해 다양한 반응을 발생하도록 하게 한다.
이제 실습을 하면서 진행합니다.
import tensorflow as tf
print(tf.__version__)
먼저, 설치가 잘 되었는지 확인한다. 2.1.0이 뜬다면 잘 설치된 것.
신경망 무작정 만들어보기 - AND 논리를 이해하는 신경망 만들기
import pandas as pd
import numpy as np
XData = [[0,0],[0,1],[1,0],[1,1]]
y = [0,0,0,1]
Keras 라이브러리를 이용해서 신경망을 설계 - 퍼셉트론 1개만 사용
# Sequential : 신경망을 생성하는 함수
from tensorflow.keras.models import Sequential
# Dense : 신경망 층을 정의하는 함수
# Activation : 활성화 함수를 정의하는 함수
from tensorflow.keras.layers import Dense, Activation
# 신경망 생성
model1 = Sequential()
# 신경망에 층을 추가 (add())
# Dense(units = 출력개수, input_dim = 입력개수(특성수))
model1.add(Dense(units=1, input_dim=2))
# 입력은 a와 b 두 개, 출력은 y 하나
# 신경망에 활성화 함수를 추가
# sigmoid : 입력에 곱해서 출력을 계산
model1.add(Activation("sigmoid"))
# 신경망 구조를 출력
model1.summary()
out :
파라미터가 3개인 것을 확인할 수 있다.
현재는 특성이 a라는 특성과 b라는 특성, 이렇게 2개가 있으니 input_dim을 2라고 적었다.
공식은 y = WX + b
현재 입력은 A와 B, = X1, X2이니 이걸 공식화하면 y = W1X1+W2X2+b
입력수 * 출력수 + 출력수 → 2 * 1 + 1 = 3
loss는 0과 1을 사용하는 이진분류이므로 binary_crossentropy, 경사하강법의 종류 중에서는 adam을 사용하고 평가방법은 이진 분류이므로 accuracy를 사용한다.
# compile() 함수 사용
# loss : 손실 함수의 종류
# - 회귀 : mse 또는 mean squared error
# - 이진분류 : binary_crossentropy
# - 다중분류 : categorical_crossentropy
# optimizer : 경사하강법의 종류 (GD, SGD)
# - rmsprop, adam
# metrics : 평가 방법
# - 분류 : acc 또는 accuracy
# - 회귀 : 사용하지 않음
model1.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
모델을 이용해서 학습한다. 학습은 우리가 알고 있는 fit함수를 사용한다.
파라미터 안에 무엇이 있는지 보고 싶다면 괄호 안에 커서를 두고 shift+tab을 눌러준다. 표기값이 무엇인지도 상세히 확인할 수 있다. batch_size는 현재 4개가 최대이므로 4개를 다 사용한다.
# fit() 함수 파라미터
# x : 특성데이터, y : 라벨데이터
# epochs : 반복수 (몇 번 학습을 할 것인지 설정)
# batch_size : 몇 개의 데이터를 이용해서 학습할 것인지
model1.fit(x=XData, y=y, epochs=2000, batch_size=4)
out :
마우스 휠을 내리다보면 몇번째 쯤에 학습이 완료되어서 1.0000으로 바뀌는지 알 수 있다. 그 이후로는 계속 100%를 보여주고 있다.
모델로 예측해보기
X_new = [[0,1],[1,1],[1,0],[0,0],[1,1]]
y_new = [0,1,0,0,1]
pred = model1.predict(X_new)
pred
# 지금은 데이터가 4개뿐이므로 값을 간신히 맞히고 있다.
모델 평가하기
# 결과값으로 오차와 정확도를 반환
print("score : ", model1.evaluate(X_new, y_new))
out :
여기까지 배웠으니 이제 여러분이 직접 실습해보도록 하세요.
실습 1. OR논리
XData = [[0,0],[0,1],[1,0],[1,1]]
y = [0,1,1,1]
model2 = Sequential()
model2.add(Dense(units=1, input_dim=2))
model2.add(Activation("sigmoid"))
model2.summary()
out :
model2.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model2.fit(x=XData, y=y, epochs=2000, batch_size=4)
out :
X_new = [[0,1],[0,0],[1,0],[1,1],[0,0],[1,0]]
y_new = [1,0,1,1,0,1]
pred = model2.predict(X_new)
pred
print("score : ", model2.evaluate(X_new, y_new))
out :
실습2. XOR논리
X_xor = [[0,0],[0,1],[1,0],[1,1]]
y_xor = [0,1,1,0]
model3 = Sequential()
model3.add(Dense(units=1, input_dim=2))
model3.add(Activation("sigmoid"))
model3.summary()
out :
epochs를 5000으로 놓고 한 5번 돌렸나..? 그래도 여전히 50퍼에서 변함없는 것을 보고 포기하고 노트정리중이었는데, 동료가 0 두개를 더 붙이고 튀었다. ^^.... 이 김에 책 읽으며 공부나 하자는 심정으로 책을 뒤지는 중.
혼자 책을 보면서 하는 공부, 복습
adam은 대체 뭘까?
loss(손실값) : 예측에서 빗나간 정도, accuracy(정확도) : 예측이 성공할 확률.
넘파이(numpy) : 수치 계산을 위해 만들어진 라이브러리. 데이터 분석에 많이 사용.
activation : 다음 층으로 어떻게 값을 넘길지 결정하는 부분. 여기서 가장 많이 사용되는 함수는 relu()와 sigmoid()라고 한다.
loss : 한 번 신경망이 실행될 때마다 오차 값을 추적하는 함수.
optimizer : 오차를 어떻게 줄여나갈지 정하는 함수.
6장. 퍼셉트론.
여기서부터가 우리가 배우는 딥러닝의 신경세포, 뉴런에 대해서 이야기하는 곳인 듯하다.
오늘 수업에서 다룬 뉴런과 신경세포에 대해서 공부가 좀 더 필요하다고 여긴다면 교재(모두의 딥러닝) 102쪽을 펼치도록 하자.
마침 끝난 50만 번의 epochs.
model3.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model3.fit(x=X_xor, y=y_xor, epochs=500000, batch_size=4)
X_xor_new = [[1,0],[0,1],[1,1],[0,0],[0,1],[1,1]]
y_xor_new = [1,1,0,0,1,0]
pred_xor = model3.predict(X_xor_new)
pred_xor
print("score : ", model3.evaluate(X_xor_new, y_xor_new))
out :
끝!!
'K-디지털 빅데이터 분석서비스 개발자과정 20.11.02~21.04.12 > PYTHON(웹크롤링, 머신·딥러닝)' 카테고리의 다른 글
21.02.17. 딥러닝 - (0) | 2021.02.17 |
---|---|
21.02.16. 딥러닝 - XOR논리(다중 퍼셉트론), 딥러닝 프레임워크, tqdm을 활용한 반복수 확인, 학습과정(fit()) 직접 구현 (0) | 2021.02.17 |
21.01.14. 머신러닝 - 텍스트마이닝 두 번째 시간 (0) | 2021.01.14 |
21.01.12. 머신러닝 - Decision Tree, Bagging, Random Forest, Boosting (0) | 2021.01.12 |
21.01.11. 머신러닝 - lasso, ridge, 선형 분류 모델 (0) | 2021.01.11 |