본문 바로가기
[인공지능]

[TensorFlow] 신경망의 완성 : 히든레이어 & 실습 2, 3 재 구현

by Hevton 2020. 12. 15.
반응형

여태까지는 뉴런 하나로 만들어진 모델을 만들었었다.

 

퍼셉트론을 깊게 연결한 진짜 신경망, 딥러닝 모델을 만들어 보자.

 

 

실습 2의 기존의 퍼셉트론

여기서, 신경망을 깊게 만드려면 기존의 퍼셉트론을 여러개 사용하여 연결시킨다.

실습 2의 퍼셉트론을 증가시킴

이렇게 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/

 

딥러닝 참고

davinci-ai.tistory.com/20

m.blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220705678959&proxyReferer=https:%2F%2Fwww.google.com%2F

bluediary8.tistory.com/87

medium.com/@dkdk0690/딥러닝-이란-b717cdf7b1aa

 

 

 

반응형