본문 바로가기

Deep Learning

Deep Learning : learning rate를 옵티마이저에서 셋팅하는 코드 / 실습문제 풀기

# 옵티마이저의 learning rate설정하는방법
  model.compile(tf.keras.optimizers.RMSprop(learning_rate=0.001), loss= 'mse',metrics= ['mse','mae'])
  return model

 

실습 

Auto MPG 데이터셋을 사용하여 1970년대 후반과 1980년대 초반의 자동차 연비를 예측하는 모델을 만듭니다. 이 정보에는 실린더 수, 배기량, 마력(horsepower), 공차 중량 같은 속성이 포함됩니다.

 

 

 

X = df.iloc[:,1:-1]

y = df['mpg']

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

ct = ColumnTransformer( [ ('encoder',OneHotEncoder(), [6] ) ] , remainder='passthrough' )
X = ct.fit_transform(X)

X = X[:,1:]

from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size= 0.2 , random_state=0)

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

def build_model():
  model = Sequential()
  model.add(Dense(64,'relu',input_shape= (8,)))
  model.add(Dense(64,'relu'))
  model.add(Dense(1,'linear'))
  # 옵티마이저의 learning rate설정하는방법
  model.compile(tf.keras.optimizers.RMSprop(learning_rate=0.001), loss= 'mse',metrics= ['mse','mae'])
  return model

model = build_model()

model.summary()

X_train.shape

epoch_history = model.fit(X_train,y_train, epochs= 1000, validation_split=0.2)
 

 

 

out

dict_keys(['loss', 'mse', 'mae', 'val_loss', 'val_mse', 'val_mae'])

 

 

 

in

epoch_history.history['mse']

 

out

결과의 마지막부분만 복사 붙여넣기 한 결과

4.99752950668335, 4.822786331176758, 5.020915985107422, 4.920413017272949, 4.853817939758301, 5.119784832000732, 4.810336112976074, 4.938455104827881, 4.933769702911377]

 

이 그래프를 보면 수 백번 에포크를 진행한 이후에는 모델이 거의 향상되지 않는 것 같습니다. model.fit 메서드를 수정하여 검증 점수가 향상되지 않으면 자동으로 훈련을 멈추도록 만들어 보죠. 에포크마다 훈련 상태를 점검하기 위해 EarlyStopping 콜백(callback)을 사용하겠습니다. 지정된 에포크 횟수 동안 성능 향상이 없으면 자동으로 훈련이 멈춥니다.

model = build_model()

early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)

 # 중요!! 학습데이터의 로스는 의미가없다 벨류게이션의 로스가 더 중요하다.

epoch_history = model.fit(X_train, y_train, epochs=100000, validation_split=0.2, callbacks= [early_stop])
# 콜백이란??
# 프레임 워크가 실행하는 코드. 코드 실행을 프레임워크에 맡기는 것.

 

 

 

결과의 마지막부분만 복사 붙여넣기 한 결과

결과의 마지막부분만 복사 붙여넣기 한 결과

 

in

plot_history(epoch_history)

 

 

 

out