【深度学习笔记整理-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)

 

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