파이썬 실습

보스턴 주택 가격 예측 네트워크 코드 분석

PGNV 2021. 5. 6. 15:19

 

from tensorflow.keras.datasets import boston_housing
(train_X, train_Y), (test_X, test_Y) = boston_housing.load_data() #훈련데이터, 테스트데이터 로드
print(type(train_X))
#출력 : <class 'numpy.ndarray'>
print(train_X.shape)
#출력 : (404, 13) (404데이터, 13속성)
print("정규화 전: ", train_X[0])
#출력 
#정규화 전:  [  1.23247   0.        8.14      0.        0.538     6.142    91.7
#   3.9769    4.      307.       21.      396.9      18.72   ]
print(train_Y[0])
#출력 : 15.2
x_mean = train_X.mean(axis=0)
x_std = train_X.std(axis=0)
train_X -= x_mean
train_X /= x_std
test_X -= x_mean
test_X /= x_std

y_mean = train_Y.mean(axis=0)
y_std = train_Y.std(axis=0)
train_Y -= y_mean
train_Y /= y_std
test_Y -= y_mean
test_Y /= y_std
#출력
#정규화 후 :  [-0.47482083 -0.48335641 -0.42698208 -0.48335641 -0.47963044 -0.44081941
#  0.15172056 -0.45581402 -0.45565404  1.64280094 -0.33791894  2.26541184
# -0.35370929]
#================전처리 완료==============================
model = tf.keras.Sequential([
                             tf.keras.layers.Dense(units=52, activation='relu', input_shape=(13,)),
                             tf.keras.layers.Dense(units=39, activation='relu'),
                             tf.keras.layers.Dense(units=26, activation='relu'),
                             tf.keras.layers.Dense(units=1)
])
#학습의 환경설정 
model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.07), loss='mse')
model.summary()




history = model.fit(train_X, train_Y, epochs=25, batch_size=32, validation_split=0.25)
callbacks = [tf.keras.callbacks.EarlyStopping(patience=3, monitor='val_loss')]
x_mean = train_X.mean()

평균

 

 

 

 

x_std = train_X.std()

표준편차

 

 

 

 

model = tf.keras.Sequential([
                             tf.keras.layers.Dense(units=52, activation='relu', input_shape=(13,)),
                             tf.keras.layers.Dense(units=39, activation='relu'),
                             tf.keras.layers.Dense(units=26, activation='relu'),
                             tf.keras.layers.Dense(units=1)
])

 

Dense : 다층 뉴럴 네트워크

input_shape=(13,) : input_layer 속성이 13개

units=52 : 1번째 layer 뉴럴이 52개

units=39 : 2번째 layer 뉴럴이 39개

units=26 : 3번째 layer 뉴럴이 26개

units=1 : 마지막 output_layer에는 뉴럴 1개

activation='relu' : 활성화함수 ReLU 사용

 

 

 

 

 

 

 

 

model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.07), loss='mse')

최적화 방법 : Adam optimizer

lr : learning late, 너무 크면 최적화 성능 떨어짐, 너무 작으면 너무 학습이 오래걸림(적절한 lr값을 찾아야함)

mse : Mean Squared Error 함수를 사용하여 오차를 측정함

 

 

 

 

 

 

 

 

history = model.fit(train_X, train_Y, epochs=25, batch_size=32, validation_split=0.25)

전체 훈련데이터 : 404

검증 데이터 : 101

실제 훈련에 사용 : 303

batch_size : 32

몇번만에 1epoch 할수있는가? 303/32 = 9.46875

Iteration : 10번

 

Epochepochs=25 : 25번 학습

batch_size=32 : 한번에 32만큼 데이터 학습

Iteration : 10번

validation_split = 0.25 : 25퍼센트는 검증데이터(404/0.25=101)

 

 

 

callbacks = [tf.keras.callbacks.EarlyStopping(patience=3, monitor='val_loss')]

callbacks : 학습을 일찍 멈추는 기능 (patience 몇번째 에포크를 기준으로 삼을지, monitor 어떤 값을 지켜볼지)

여기서는 val_loss가 3회의 에포크를 수행하는 동안 최고 기록을 갱신 하지 못한다면 학습을 멈춤