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회의 에포크를 수행하는 동안 최고 기록을 갱신 하지 못한다면 학습을 멈춤
'파이썬 실습' 카테고리의 다른 글
텍스트 파일 가공하기 (friends101.txt 가공) (0) | 2021.05.11 |
---|---|
도미와 빙어 지도학습 실습 (0) | 2021.04.29 |