본문 바로가기
DNN with Keras/Transfer Learning

회귀 네트워크 전송

by goatlab 2024. 2. 13.
728x90
반응형
SMALL

Transfering to a Regression Network

 

Iris 비용 데이터 세트에는 원래 Iris 데이터 세트에 포함된 예측 변수인 꽃받침 너비, 꽃받침 길이, 꽃잎 너비 및 꽃잎 길이에 부합하는 꽃 샘플에 대한 측정값이 있다. 여기에 비용 데이터 세트가 표시된다.

 

import pandas as pd

df_cost = pd.read_csv("https://data.heatonresearch.com/data/t81-558/iris_cost.csv", na_values=['NA', '?'])
df_cost

 

전이 학습이 효과적이려면 새로 훈련된 신경망의 입력이 처음 전송한 신경망에 가장 가깝게 일치해야 한다.

 

이 최종 분류를 수행하는 소프트맥스 활성화 함수가 포함된 마지막 출력 계층을 제거한다. 비용 예측을 출력할 새로운 출력 계층을 생성합니다. 이 새 레이어에서 가중치만 훈련한다. 처음 두 개의 레이어는 훈련할 수 없는 것으로 표시한다.

 

이 과정은 처음 몇 개의 레이어를 반복하여 새 신경망에 복사함으로써 이루어진다. 새로운 신경망의 요약을 출력하여 Keras가 이전 출력 레이어를 제거했는지 확인한다.

 

model3 = Sequential()

for i in range(2):
    layer = model.layers[i]
    layer.trainable = False
    model3.add(layer)
    
model3.summary()
Model: "sequential_2"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (None, 50)                250       
                                                                 
 dense_1 (Dense)             (None, 25)                1275      
                                                                 
=================================================================
Total params: 1525 (5.96 KB)
Trainable params: 0 (0.00 Byte)
Non-trainable params: 1525 (5.96 KB)
_________________________________________________________________

 

최종 회귀 출력 레이어를 추가하여 새로운 신경망을 완성한다.

 

model3.add(Dense(1))  # 출력
model3.compile(loss='mean_squared_error', optimizer='adam')
model3.summary()
Model: "sequential_2"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (None, 50)                250       
                                                                 
 dense_1 (Dense)             (None, 25)                1275      
                                                                 
 dense_3 (Dense)             (None, 1)                 26        
                                                                 
=================================================================
Total params: 1551 (6.06 KB)
Trainable params: 26 (104.00 Byte)
Non-trainable params: 1525 (5.96 KB)
_________________________________________________________________

 

이제, 비용을 예측하기 위해 출력 레이어만 학습한다. 구성된 데이터 세트의 비용은 종에 따라 달라지므로 이전 학습이 도움이 될 것이다.

 

import numpy as np

x = df_cost[['sepal_l', 'sepal_w', 'petal_l', 'petal_w']].values
y = df_cost.cost.values

# Train the last layer of the network
model3.fit(x, y, verbose=2, epochs=100)

 

이전 모델에서 전송된 레이어가 포함된 새 모델에 대한 샘플 내 RMSE를 평가할 수 있다.

 

from sklearn.metrics import accuracy_score

pred = model3.predict(x)
score = np.sqrt(metrics.mean_squared_error(pred, y))
print(f"최종 점수 (RMSE): {score}")
8/8 [==============================] - 0s 7ms/step
최종 점수 (RMSE): 1.559858922311059
728x90
반응형
LIST