【深度學習筆記整理-3.3】標準化與K折交叉驗證

1.標準化

首先標準化可以解決不同範圍數據的情況,解決其中一種特徵受制於scale而導致的弱影響問題。

此時不同特徵同屬於接近的scale,梯度下降的速度是最快的。

代碼如下:

mean = train_data.mean(axis=0)

std = train_data.std(axis=0)

train_data -= mean

train_data /= std

test_data -= mean

test_data /= std

可以注意到,這裏的平均和標準差是沿着樣本軸方向進行的,並且,測試資料在進行標準化時,也只能使用訓練資料的均值和標準差。

2.K折交叉驗證

K折交叉驗證常用在數據集較小的情況下,此時由於分割出的訓練集分佈可能無法代表原來整體的分佈,就需要進一步使用可信度較高的方法劃分驗證集。

具體來說K折交叉驗證會將訓練集分成n份,以5份舉例,每次會選取其中一份作爲訓練集,其他幾份連接起來作爲訓練集,訓練集訓練出的模型拿給當下驗證集進行預測,最後將幾次預測的結果取平均(分類任務還有投票制等)。

k折交叉驗證有些類似於多模型的集成學習,因爲實際上我們是產生了多個模型並對結果進行集成。

代碼如下:

import numpy as np

k = 5

num_val_datas = len(train_datas)//k  # 確定每折的數據量

all_scores = [] # 存儲每個模型的結果

for i in range(k):

    val_x_trains = train_datas[i*num_val_datas:(i+1)*num_val_datas]

    val_y_trains = train_targets[i*num_val_datas:(i+1)*num_val_datas]

    partitial_x_train = np.concatenate([train_datas[:i*num_val_datas],
                                       train_datas[(i+1)*num_val_datas:]],axis=0)

    partitial_y_train = np.concatenate([train_targets[:i*num_val_datas],
                                       train_targets[(i+1)*num_val_datas:]],axis=0)

    model = build_model()

    model.fit(partitial_x_train,partitial_y_train,epochs=5,batch_size=1,verbose=2)

    loss,e = model.evaluate(val_x_trains,val_y_trains,verbose=2)

    all_scores.append(e)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章