강의자료/머신러닝

[딥러닝실습] 히든레이어 생성 실습

파아란기쁨 2022. 8. 5. 11:20

2021.12.03 - [강의실/머신러닝] - 01-5. 퍼셉트론이란?

 

01-5. 퍼셉트론이란?

인공지능의 역사를 보면 1950년대 퍼셉트론을 제시 후 이 이론을 바탕으로 1960년대 제1전성기를 맞이하게 되는데요~ 이 퍼셉트론은 향후 다층 퍼셉트론으로 다시 돌아 오면서 제2전성기를 맞이

wondangcom.com

퍼셉트론에서 단층퍼셉트론이 진화를 해서 다층퍼셉트론이 나오게 되는데요~

여러개의 은닉층을 두어 다층퍼셉트론을 만들었다고 확인을 했습니다.

오늘은 여러개의 은닉층을 만드는 방법에 대해 살펴 보도록 하겠습니다.

보스턴 집값을 예측하는 모델의 구성은 다음과 같은 형태를 가지고 있었습니다.

13개의 독립변수를 가지고 하나의 종속변수를 만드는 단층레이어 모델로 실습을 진행했습니다.

출처:생활코딩

이것을 위와 같은 다층레이어 모델로 만들어 보겠습니다.

506개의 데이터와 13개의 독립변수를 가지고 있는 원래 데이터를 506개의 데이터와 5개의 종속변수를 만든 다음 이 5개의 종속변수를 독립변수로 사용하여 1개의 종속변수를 만들어 보겠습니다.

이렇게 각각의 모델을 연속적으로 연결하여 거대한 하나의 신경망을 만든느 것이 딥러닝/인공신경망입니다.

그렇다면 이러한 구조를 만드는 것은 많이 복잡할까 걱정되시죠?

직접 코드를 살펴 보도록 하겠습니다.

실습 과정은 지난번의 실습과정과 동일합니다.

1. 과거의 데이터를 준비합니다.(과거의 데이터에서 원인과 결과 즉 독립변수와 종속변수를 찾아 냅니다.)

2. 모델의 구조를 만듭니다. 

3. 데이터로 모델을 학습합니다.

4. 모델을 이용합니다.

과거 데이터 준비
#보스턴 주택 데이터셋
from sklearn import datasets
보스턴 = datasets.load_boston()

print(보스턴.keys())

import pandas as pd
독립 = pd.DataFrame(보스턴['data'],columns=보스턴['feature_names'])
종속 = pd.DataFrame(보스턴['target'],columns=['target']) 
print(독립.head())
print(종속.head())

데이터 준비과정은 기존과 동일합니다.

모델의 구조를 만듭니다.
import tensorflow as tf
###########################
# 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)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

H = tf.keras.layers.Dense(10, activation='swish')(X) => 이 부분 한줄만 추가 되는 것을 확인 할 수 있습니다.

여기서 활성화 함수는 swish 를 사용했습니다.

swish 는 최근에 발표된 성능이 좋은 활성화 함수입니다.

이때 주의 해야 될 사항이 다음 줄 Y = tf.keras.layers.Dense(1)(H) 에서 매개변수가 X가 아닌 H가 된다는 부분만 주의 하시면 됩니다.

데이터로 모델을 학습(FIT)합니다.
###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=100)
모델을 이용합니다.
###########################
# 4. 모델을 이용합니다
print(model.predict(독립[5:10]))
# 종속변수 확인
print(종속[5:10])

기존에 단층레이어로 학습한 데이터와 비교해 보시죠.

단층레이어 학습내용

좀 더 정교해진 모습을 보실 수 있습니다.

같은 데이터를 모델에 레이어를 한개층 정도 더 만들어 보도록 하겠습니다.

import tensorflow as tf
###########################
# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(5, activation='swish')(X)
H = tf.keras.layers.Dense(2, activation='swish')(H)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

모델의 구조에 레이어를 두개층을 더 만든 후 학습하여 동일한 데이터를 학습한 결과를 출력해 보았습니다.

 

다음으로 아이리스 분류모델을 만들었던 것을 다층레이어로 구현해 보도록 하겠습니다.

###########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
from sklearn import datasets

 
###########################
# 1.과거의 데이터를 준비합니다.
아이리스 = datasets.load_iris()

독립 = pd.DataFrame(아이리스['data'],columns=아이리스['feature_names'])
종속 = pd.DataFrame(아이리스['target'],columns=['target']) 
print(독립.head())
print(종속.head())

print(종속.dtypes)

#타겟을 범주형데이터로 변환해 주자
종속 = 종속.astype('category')
print(종속.head())
print(종속.dtypes)

# 원핫인코딩
종속 = pd.get_dummies(종속)
print(종속.head())

###########################
# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[4])
#Y = tf.keras.layers.Dense(3, activation='softmax')(X)
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')
###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000, verbose=0)
###########################
# 4. 모델을 이용합니다
# 맨 처음 데이터 5개
print(model.predict(독립[:5]))
print(종속[:5])

마지막 결과는 다음과 같이 나옵니다.

setosa 는 1.0 의 값의 확률로 보여 주게 됩니다.

단층레이어일때 0.9 정도의 확률보다 더 정교해 진것을 확인 할 수 있습니다.


은닉층에 해당하는 히든레이어 만드는 방법을 만드는 방법을 살펴 보았습니다.

이 자료는 생활코딩을 참고하여 만들었습니다.

 

<출처>

https://opentutorials.org/course/4570/28988

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 사이버몰의 이용약관 바로가기