반응형

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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기