大佬教程收集整理的这篇文章主要介绍了Python深度学习4——机器学习基础,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在强化学习中, 智能体(agent)接收有关其环境的信息,并学会选择使某种奖励最大化的行动
num_validation_samples = 10000
np.random.shuffle(data)
validation_data = data[:num_validation_samples]
data = data[num_validation_samples:]
Training_data = data[:]
model = get_model()
model.Train(Training_data)
validation_score = model.evaluate(validation_data)
# 现在你可以调节模型、重新训练、评估,然后再次调节……
model = get_model()
model.Train(np.concatenate([Training_data,
validation_data]))
test_score = model.evaluate(test_data)
k = 4
num_validation_samples = len(data) // k
np.random.shuffle(data)
validation_scores = []
for fold in range(k):
validation_data = data[num_validation_samples * fold:
num_validation_samples * (fold + 1)]
Training_data = data[:num_validation_samples * fold] +
data[num_validation_samples * (fold + 1):]
model = get_model()
model.Train(Training_data)
validation_score = model.evaluate(validation_data)
validation_scores.append(validation_score)
validation_score = np.average(validation_scores)
model = get_model()
model.Train(data)
test_score = model.evaluate(test_data)
向量化:神经网络的所有输入和目标都必须是浮点数张量(在特定情况下可以是整数张量)。无论处理什么数据(声音、图像还是文本),都必须首先将其转换为张量,这一步叫作数据向量化(data vectorization)
值标准化:一般来说,将取值相对较大的数据(比如多位整数,比网络权重的初始值大很多)或异质数据(heterogeneous data,比如数据的一个特征在 0~1 范围内,另一个特征在 100~200 范围内)输入到神经网络中是不安全的。这么做可能导致较大的梯度更新,进而导致网络无法收敛 。输入数据应该具有以下特征 :取值较小:大部分值都应该在 0~1 范围内;同质性(homogenous):所有特征的取值都应该在大致相同的范围内。更严格的标准化方法:将每个特征分别标准化,使其平均值为 0 ;将每个特征分别标准化,使其标准差为 1
@H_675_99@# 假设 x 是一个形状为 (samples, features) 的二维矩阵
x -= x.mean(axis=0)
x /= x.std(axis=0)
处理缺失值:一般来说,对于神经网络,将缺失值设置为 0 是安全的,只要 0 不是一个有意义的值。网络能够从数据中学到 0 意味着缺失数据,并且会忽略这个值。如果测试数据中可能有缺失值,而网络是在没有缺失值的数据上训练的,应该人为生成一些有缺失项的训练样本:多次复制一些训练样本,然后删除测试数据中可能缺失的某些特征
特征工程(feature ENGIneering)是指将数据输入模型之前,利用你自己关于数据和机器学习算法(这里指神经网络)的知识对数据进行硬编码的变换(不是模型学到的),以改善模型的效果
特征工程的本质:用更简单的方式表述问题,从而使问题变得更容易
机器学习的根本问题是优化和泛化之间的对立
优化(optimization)是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习)
泛化(generalization)是指训练好的模型在前所未见的数据上的性能好坏
训练开始时,优化和泛化是相关的:训练数据上的损失越小,测试数据上的损失也越小。这时的模型是欠拟合(underfit)的,即仍有改进的空间,网络还没有对训练数据中所有相关模式建模
但在训练数据上迭代一定次数之后,泛化不再提高,验证指标先是不变,然后开始变差,即模型开始过拟合。这时模型开始学习仅和训练数据有关的模式,但这种模式对新数据来说是错误的或无关紧要的
最优解决方法是获取更多的训练数据。次优解决方法是调节模型允许存储的信息量,或对模型允许存储的信息加以约束
降低过拟合的方法叫作正则化(regularization)
减少模型中可学习参数的个数(这由层数和每层的单元个数决定)
在深度学习中,模型中可学习参数的个数通常被称为模型的容量(capacity)
直观上来看,参数更多的模型拥有更大的记忆容量(memorization capacity),因此能够在训练样本和目标之间轻松地学会完美的字典式映射,这种映射没有任何泛化能力
另一方面,使用的模型应该具有足够多的参数,以防欠拟合,即模型应避免记忆资源不足
一般的工作流程是开始时选择相对较少的层和参数,然后逐渐增加层的大小或增加新层,直到这种增加对验证损失的影响变得很小
简单模型比复杂模型更不容易过拟合。简单模型(simple model)是指参数值分布的熵更小的模型(或参数更少的模型)
强制让模型权重只能取较小的值,从而限制模型的复杂度,这使得权重值的分布更加规则(regular)。这种方法叫作权重正则化(weight regularization),其实现方法是向网络损失函数中添加与较大权重值相关的成本(cost):
对某一层使用 dropout,就是在训练过程中随机将该层的一些输出特征舍弃(设置为 0)。 dropout 比率(dropout rate)是被设为 0 的特征所占的比例,通常在 0.2~0.5范围内。测试时没有单元被舍弃,而该层的输出值需要按 dropout 比率缩小,因为这时比训练时有更多的单元被激活,需要加以平衡
为了实现这一过程,还可以让两个运算都在训练时进行,而测试时输出保持不变
@H_675_99@layer_output *= np.random.randint(0, high=2, size=layer_output.shapE)
layer_output /= 0.5
核心思想是在层的输出值中引入噪声,打破不显著的偶然模式(Hinton 称之为阴谋)。如果没有噪声的话,网络将会记住这些偶然模式
你的输入数据是什么?你要预测什么?只有拥有可用的训练数据,你才能学习预测某件事情。比如,只有同时拥有电影评论和情感标注,你才能学习对电影评论进行情感分类。因此,数据可用性通常是这一阶段的限制因素
你面对的是什么类型的问题?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?或者是其他问题,比如聚类、生成或强化学习?确定问题类型有助于你选择模型架构、损失函数等
有一类无法解决的问题你应该知道,那就是非平稳问题(nonstationary problem)
这一阶段的目标是获得统计功效(statistical power),即开发一个小型模型,它能够打败纯随机的基准(dumb baseline)
要记住你所做的两个假设:
需要选择三个关键参数来构建第一个工作模型:
你将不断地调节模型、训练、在验证数据上评估(这里不是测试数据)、再次调节模型,然后重复这一过程,直到模型达到最佳性能。你应该尝试以下几项:
请注意:每次使用验证过程的反馈来调节模型,都会将有关验证过程的信息泄露到模型中。如果只重复几次,那么无关紧要;但如果系统性地迭代许多次,最终会导致模型对验证过程过拟合
一旦开发出令人满意的模型配置,你就可以在所有可用数据(训练数据 + 验证数据)上训练最终的生产模型,然后在测试集上最后评估一次
以上是大佬教程为你收集整理的Python深度学习4——机器学习基础全部内容,希望文章能够帮你解决Python深度学习4——机器学习基础所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。