반응형
0. 들어가기
-. 인공신경망의 효율을 높이기 위한 기법인 i) 기본 ii) 히든레이어 추가 iii) 입력데이터의 정규화(?) BatchNormalize 기능을 다뤄본다.
-. 보스턴 집값 데이터를 사용했고, 앞과 마찬가지로 생활코딩 예제들을 따라간다.
1. 기본 레이어만 사용
-. 특별할 것 없이, 단일레이어를 사용한 결과
#python 3.8.0 tensorflow 2.4.1
# data 불러오기
data = pd.read_csv("boston.txt")
A = data[["crim","zn","indus","chas","nox","rm","age","dis","rad","tax","ptratio","b","lstat"]]
B = data[['medv']]
---
# 모델 설정
# 기본레이어만
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")
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("1000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 397us/step - loss: 24.4100
24.410005569458008
'''
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("2000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 482us/step - loss: 23.8440
23.84398078918457
'''
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("3000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 415us/step - loss: 25.3538
25.353776931762695
'''
2. hidden layer 삽입
-. 최적화를 도와주는 hidden layer 삽입
-. 20프로 정도 loss 감소함
# 모델 설정
# hidden layer 포함
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(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("1000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 407us/step - loss: 21.6943
21.694284439086914
'''
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("2000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 404us/step - loss: 19.9241
19.924100875854492
'''
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("3000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 404us/step - loss: 19.9241
19.924100875854492
'''
3. Hidden layer에 BatchNomalization 추가
-. 데이터를 조금 만져주는 것 만으로 loss 크게 감소함.
# 모델 설정
# BatchNormalization layer 추가
# hidden layer 포함
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(10)(X)
H = tf.keras.layers.BatchNormalization()(H) #BatchNormalization 설정
H = tf.keras.layers.Activation("swish")(H)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss="mse")
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("1000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 531us/step - loss: 17.6249
17.62493133544922
'''
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("2000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 568us/step - loss: 11.2220
11.221979141235352
'''
# 학습
model.fit(A, B, epochs=1000, verbose=0)
model.fit(A, B, epochs=10, verbose=1)
print("3000회 후 평가")
res = model.evaluate(A, B, batch_size=10)
print(res)
'''
51/51 [==============================] - 0s 568us/step - loss: 11.2220
11.221979141235352
'''
4. 정리
-. 그래프로 그릴 시 layer 설정에 따라 loss값이 엄청나게 개선되는 것을 볼 수 있다.
728x90
반응형
'python > tensorflow' 카테고리의 다른 글
[tensorflow] Keras dataset offline으로 사용하기 (0) | 2021.04.06 |
---|
최근댓글