여태까지는 뉴런 하나로 만들어진 모델을 만들었었다.
퍼셉트론을 깊게 연결한 진짜 신경망, 딥러닝 모델을 만들어 보자.
여기서, 신경망을 깊게 만드려면 기존의 퍼셉트론을 여러개 사용하여 연결시킨다.
이렇게 h1 ~ h5 노드를 추가하여(히든 레이어를 구성) 5개의 퍼셉트론으로 만든다.
+ 이전에 종속변수가 2개 이상이 되면 뉴런도 2개로 늘어나는 것인지 궁금해했는데, 그것도 그냥 하나의 뉴런 코드이고, 이런 방식이 여러 뉴런이 동작하게끔 작동하는 인공신경'망'을 구성하는 것이다.
이렇게 히든 레이어를 통해 기존 모델의 각 퍼셉트론을 여러개로 확장시켜 모델을 확장하고, 확장한 각각의 모델을 연속적으로 연결하여 하나의 거대한 신경망인 딥러닝을 구현할 수 있다.
참고로 '여러 개의 모델로 분리한다' 는 표현은 비유일 뿐이다.
실제로는 커다란 하나의 함수가 만들어 지는 것이고,
그 함수의 내부를 들여다 보면 히든레이어 부분에서 구분되는 형태를 볼 수 있는 거에요.
y = 분류함수(x) 를 만드는 데요.
y = output( hidden1( hidden2(x) ) ) 이런 형태로 이해한다고 생각하면 되겠습니다.
히든레이어 하나가 선형함수 하나를 의미하고,
멀티레이어 모델 전체 구조를 그러한 선형 함수의 중첩된 형태로
이해할 수 있다는 설명인 것입니다.
출처 - "https://opentutorials.org/module/4966/28988"
+ 딥러닝은 이렇게 입력층과 출력층 사이에 여러 개의 히든레이어를 구성한다. ( 주로 히든 레이어 2개 이상일 때 부터를 깊은 신경망(Deep Nueral Network)이라고 하고, 이 기반의 머신러닝 학습을 딥러닝이라고 주로 말한다 )
TensorFlow는 이런 구조를 간단하게 구성할 수 있도록 도와준다.
#기존의 코드
#2. 모델의 구조를 만듭니다.
X = tf.keras.layers.Input(shape=[13])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X,Y)
model = compile(loss='mse')
---
# 히든 레이어 추가하여 신경'망' 구성
#2. 모델의 구조를 만듭니다.
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(5, activation='swish')(X) # 히든레이어 추가
Y = tf.keras.layers.Dense(1)(H) # X 대신 히든레이어 H 전달
model = tf.keras.models.Model(X,Y)
model = compile(loss='mse')
swish로 활성화 함수를 사용했는데, 최근에 발표된 성능좋은 활성화함수로, 이것을 그냥 사용하면된다.
---
히든레이어를 두층 더 쌓아보자
# 히든 레이어를 3개 사용
#2. 모델의 구조를 만듭니다.
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(5, activation='swish')(X) # 히든레이어 추가
H = tf.keras.layers.Dense(3, activation='swish')(H) # 히든레이어 추가
H = tf.keras.layers.Dense(3, activation='swish')(H) # 히든레이어 추가
Y = tf.keras.layers.Dense(1)(H) # X 대신 히든레이어 H 전달
model = tf.keras.models.Model(X,Y)
model = compile(loss='mse')
더욱 똑똑한 신경망이 구성된다. 더 똑똑해진다.
정리 : 이렇게 히든 레이어를 쌓음으로써(멀티레이어) 뉴런이 한개가 아닌 여러개로 구성되면서 진짜 인공신경망, 딥러닝 모델을 만들 수 있다.
실습
이제 실습 2, 3을 진짜 딥러닝(하나의 뉴런이 아닌 인공신경망)으로 업그레이드 구현해보자.
(실습 1은 독립변수와 종속변수가 1 : 1이므로, 히든레이어를 도입해도 효과가 없다)
실습 2. 보스턴 집값 예측
##########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
###########################
# 1.과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
# 종속변수, 독립변수
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox',
'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)
###########################
# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(10, activation='swish')(X)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
# 모델 구조 확인
model.summary()
###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=100)
###########################
# 4. 모델을 이용합니다
print(model.predict(독립[:5]))
print(종속[:5])
###########################
# 모델의 수식 확인
print(model.get_weights())
실습 3. 아이리스 품종 예측
###########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
###########################
# 1.과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
아이리스 = pd.read_csv(파일경로)
# 원핫인코딩
아이리스 = pd.get_dummies(아이리스)
# 종속변수, 독립변수
독립 = 아이리스[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 아이리스[['품종_setosa', '품종_versicolor', '품종_virginica']]
print(독립.shape, 종속.shape)
###########################
# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[4])
H = tf.keras.layers.Dense(8, activation="swish")(X)
H = tf.keras.layers.Dense(8, activation="swish")(H)
H = tf.keras.layers.Dense(8, activation="swish")(H)
Y = tf.keras.layers.Dense(3, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy',
metrics='accuracy')
# 모델 구조 확인
model.summary()
###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=100)
###########################
# 4. 모델을 이용합니다
print(model.predict(독립[:5]))
print(종속[:5])
출처 - opentutorials.org/
딥러닝 참고
medium.com/@dkdk0690/딥러닝-이란-b717cdf7b1aa
'[인공지능]' 카테고리의 다른 글
카톡에서 ChatGPT 사용하기 (2) | 2023.04.11 |
---|---|
[TensorFlow] TIPS /HACKS (0) | 2020.12.15 |
[TensorFlow] 지도학습 전체과정 3 (Feat. 딥러닝) (0) | 2020.12.15 |
[TensorFlow] 딥러닝 학습원리 (0) | 2020.12.15 |
[TensorFlow] 지도학습 전체과정 2 (Feat. 딥러닝) (0) | 2020.12.15 |