Tensorflow - Python (4) 히든레이어
Hidden Layer
- perceptron하나로 연결된 모델이아닌 신경망을 더 깊게만드는 것
- Hidden Layer
- 독립변수와 종속변수사이에 추가되는 layer
- input layer 과 output layer사이에 추가되는 layer
- Hidden Layer 만드는 이유
- 보다 복잡한 모델을 사용하여 데이터를 학습하는 것
- 복잡한 모델은 복잡한 수식과 동의어
- 히든레이어를 사용한다는 것은 결과를 더 정확히 예측할 수 있는 함수(모델)를 만들게 된다는 것
- 구조를 복잡하게 함으로써 더 복잡한 문제를 풀 수 있게 됩니다. 물론 구조를 복잡하게 되면 시간이 좀 더 걸리겠죠. 처리속도의 손실을 통해 정확도를 높이는 거에요.
- layer (node) 를 몇개 추가해야 적절한 것인지에 대한 기준
- loss가 낮아지는 만큼 추가
보스턴 집값 예측 (실습)
##########################
# 라이브러리 사용
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) # 10개의 노드를 만들 것, hidden layer의 activation함수는 swish
Y = tf.keras.layers.Dense(1)(H) # X가 아닌 H를 대입
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
# 모델 구조 확인
model.summary() # summary() 하면 layer개수 정보에대한 자세한 출력이나옵니다.
###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=100)
###########################
# 4. 모델을 이용합니다
print(model.predict(독립[:5]))
print(종속[:5])
###########################
# 모델의 수식 확인
print(model.get_weights())
- model.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 13)] 0
_________________________________________________________________
dense (Dense) (None, 10) 140
_________________________________________________________________
dense_1 (Dense) (None, 1) 11
=================================================================
Total params: 151
Trainable params: 151
Non-trainable params: 0
_________________________________________________________________
- InputLayer : 입력layer는 13개의 변수를 받음
- dense_2 : 13개의 입력을 받아서 10개의 output을 만드는 layer
-
dense_3 : 10개의 입력을 받아서 1개의 output을 만드는 layer
- Params # : 컴퓨터가 학습하는 가중치
- 140 : 13개의 입력을 받아서 bias하나 추가되니까 수식마다 14개. output이 10개니까 14 * 10 == 140개
- 11 : 10개의 입력을 받아서 1개의 출력을 만드니까 수식이 10개고 1개의 bias가 추가되니까 11개의 가중치
아이리스 품종 (실습)
###########################
# 라이브러리 사용
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) # node(layer)개수는 8개
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])
강의 출처 : 생활코딩