머신러닝/Tensorflow 기초

4. 신경망 완성 : 히든 레이어

dlwltn98 2021. 1. 20. 21:50

머신러닝 야학 정리

 

신경망을 깊게 만드는 방법
     ⇒ 기존의 퍼셉트론을 여러개 사용하여 연결만 하면 된다.
     ⇒ 입력과 결과사이에 퍼셉트론들을 추가해주면 된다.

                  - 입력 부분 - Input Layer,     출력 부분 - Output Layer

                  - 입력과 출력 사이 추가한 부분 - Hidden Layer

결과를 만들기 위해서는 히든 레이어의 모든 값들을 입력으로 하는 하나의 퍼셉트론 필요
히든 레이어의 첫번째 결과를 만들기 위해 하나의 퍼셉트론 필요
       ⇒ 총 5개의 노드가 있으니 5개의 퍼셉트론 필요

 - 데이터의 관점 (ex. 보스턴 집값 총 506개의 데이터)

    입력 : 독립변수로 13개의 칼럼을 가진 데이터 , (506,13)
    출력 : 종속변수로 1개의 칼럼을 가진 데이터, (506,1)
    히든 레이어 : 5개의 칼럼을 가진 데이터, (506, 5)
           - 히든 레이어→출력
                  ⇒ 5개의 입력을 받고 1개의 출력을 만드는 모델
           - 입력→히든 레이어
                  ⇒ 13개의 입력을 받고 5개의 출력을 만드는 모델

          각각의 모델을 연속적으로 연결하여 거대한 신경망을 만드는것
                            ⇒ 딥러닝(인공신경망)

 

# 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')

주의 - 마지막 출력을 넣을 때 X를 넣으면 안되고 마지막 히든 레이어에서 만들어진 H를 넣어주어야 함

  • 히든 레이어 활성화 함수 : swish
# 히든 레이어 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)
model = tf.keras.models.Model(X,Y)
model.compile(loss='mse')

+ 실습

# 1. Boston
import tensorflow as tf
import pandas as pd

file_path = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
boston = pd.read_csv(file_path)

독립 = boston[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
       'ptratio', 'b', 'lstat']]
종속 = boston[['medv']]
print(독립.shape, 종속.shape)

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.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10)

# 멀티 레이어 학습에 대한 확인
model.summary()

- Param → 가중치

  • 13 + 항 1개 = 14 * 10 = 140
  • 10 + 항 1개 = 11 * 1 = 11
print(model.predict(독립[:5]))
print(종속[:5])

# 2. iris

file_path = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
iris = pd.read_csv(file_path)

iris = pd.get_dummies(iris)

독립 = iris[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = iris[['품종_setosa', '품종_versicolor','품종_virginica']]
print(독립.shape, 종속.shape)

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.fit(독립, 종속, epochs=10)

print(model.predict(독립[0:5]))
print(종속[0:5])


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

'머신러닝 > Tensorflow 기초' 카테고리의 다른 글

+ 머신러닝 마무리  (0) 2021.01.21
3. 아이리스 품종 분류  (0) 2021.01.19
+ 딥러닝 학습의 원리  (0) 2021.01.15
2. 보스턴 집값 예측  (0) 2021.01.14
1. 레모네이드 판매 예측  (1) 2021.01.13