神经网络基础:学习方法与数据处理
作者:互联网
神经网络基础:学习方法与数据处理
Author:雾雨霜星
Time:2021-06-26
欢迎来我的网站学习:
https://www.shuangxing.top/#/passage?id=28
前言
在把书上的三个例子自己码了一次跑完,对keras的使用稍微有点上手了,在训练模型的过程终究难以跨越的一个坎就是,过拟合。
学习方法
监督学习
给定一组样本,训练模型从输入数据映射到输出目标。数据的目标是人为所做的标注。
常见有:逻辑回归与分类、序列生成、语法树预测、目标检测、图像分割
无监督学习
在没有指定目标的状况下,从输入数据中找到数据间的关系。
目的在于数据压缩、数据降噪等,常见训练方法是:降维、聚类。
为了更好的了解数据集,处理数据,无监督学习往往是监督学习处理数据的必要步骤。
自监督学习
给定一组数据,训练从输入数据映射到输出目标,但是目标不是人为给定的,而是使用启发式算法从输入数据中生成的。
强化学习
通过训练得到模型,学会选择某种奖励最大化的行动。
例子比如自动驾驶、谷歌的围棋机器人。
验证集的使用
在整个训练(学习)流程中,数据集一般分为三组:训练接、验证集、测试集
训练集用于训练模型参数(权重和偏置量),验证集用于确定模型超参数(网络层数、隐藏层层数、训练轮数等),测试集用于评估模型。
验证集和训练集都不该参与到模型的训练中,即模型的反向传递不会涉及到验证集合测试集。
验证集一般可以用在每次模型训练一轮后,计算模型的验证集上的损失(Loss on Validation)和验证集上的精度(metrics on Validation)。
但是计算所得的损失和精度不会参与到反向传播,计算梯度不会利用验证集上计算得到的参数。
验证集上计算的损失和精度仅仅是用于给训练者提供参考:模型在每一轮训练后的状况、什么时候开始出现过拟合、对比其他架构(不同层数、不同隐藏层等)每轮训练效果如何,等参考。
用验证集确定的超参数包括:
-
网络层数
-
网络隐藏层数
-
网络正则化设置
-
训练轮数
-
学习率
等
注意在keras的models训练API,fit方法中,可以传入验证集,用于记录每次训练后的损失和精度,从而做出模型的调整。也可以不传入验证集数据,这样就直接训练模型,没有每轮训练状况在非训练集上的参考。
可以理解为,训练集就像是我们上课每次的作业,验证集就像是高考的模拟考,测试集就是高考。
训练前的数据处理
数据预处理
为了使得训练数据在网络的训练过程中,使训练收敛速度更快,效果更好,减少资源的浪费,对数据进行预处理往往是必须的。
通常需要进行的操作是以下几步:
-
向量化
神经网络输入数据应该是浮点型张量,某些特定状况下可以使用整数。
把数据转化为张量就是数据向量化。
import numpy as np data_s = np.asarray(data).astype(np.float64)
- 执行这一步骤是因为keras神经网络对输入数据的要求。
-
标准化
把数据进行变换,使得平均值为0,标准差为1。
x -= x.mean(axis=0) x /= x.std(axis=0)
-
该步骤是对那些取值范围较大、每个数据间的差异较大的数据进行的。因为这样的数据在网络中训练时往往会计算得到较大的梯度更新,导致网络无法收敛,消耗更多的训练时间。
-
目的是使得数据具有以下特征:
- 取值范围较小:一般控制在0~1范围内
- 同质性:所有特征的取值在大致的范围内
-
-
处理缺失值
在数据中可能会有缺失值,一般使用0代表缺失值,让网路在训练中学习到0代表缺失数据。
注意的是,划分训练集、验证集和测试集时,要保证训练集中有一定数量的具有缺失值数据的样本,不然网路无法学习到忽略缺失值。通常做法是自己人为从原本数据中抽一些样本来,删除某些特征值改为0,制作含有缺失值数据的样本。
数据特征化
通过对数据的转化,采用一些编码方式来转化数据,从而确定出特征的表示方法。
用更加简单的方式表述问题,使得问题变得容易。
目的是减少所需的训练资源(训练时间、占用内存、GPU消耗),以及在更少的数据上解决问题。
转载请注明出处!
欢迎来我的网站学习:
https://www.shuangxing.top/#/passage?id=28
Thanks!
PS: 毕竟,霜星酱水平有限,如果发现任何错误还请及时邮箱告知我,我会去改哦!
标签:训练,验证,模型,学习,神经网络,数据处理,集上,数据 来源: https://blog.csdn.net/weixin_44786238/article/details/118661998