当前位置: 首页 > news >正文

网站建设需要申请服务器吗学历提升报名

网站建设需要申请服务器吗,学历提升报名,网站建设 seo sem,网络推广是以企业产品或服务注#xff1a;书中对代码的讲解并不详细#xff0c;本文对很多细节做了详细注释。另外#xff0c;书上的源代码是在Jupyter Notebook上运行的#xff0c;较为分散#xff0c;本文将代码集中起来#xff0c;并加以完善#xff0c;全部用vscode在python 3.9.18下测试通过。…注书中对代码的讲解并不详细本文对很多细节做了详细注释。另外书上的源代码是在Jupyter Notebook上运行的较为分散本文将代码集中起来并加以完善全部用vscode在python 3.9.18下测试通过。 Chapter4 Multilayer Perceptron 4.4 Model Selection 作为机器学习科学家我们的目标是发现模式pattern。但是我们如何才能确定模型是真正发现了一种泛化的模式而不是简单地记住了数据呢例如我们想要在患者的基因数据与痴呆状态之间寻找模式其中标签是从集合 { 痴呆 , 轻度认知障碍 , 健康 } \{\text{痴呆}, \text{轻度认知障碍}, \text{健康}\} {痴呆,轻度认知障碍,健康}中提取的因为基因可以唯一确定每个个体不考虑双胞胎所以在这个任务中是有可能记住整个数据集的。我们不想让模型只会做这样的事情“那是鲍勃我记得他他有痴呆症”。原因很简单当我们将来部署该模型时模型需要判断从未见过的患者。只有当模型真正发现了一种泛化模式时才会作出有效的预测。 更正式地说我们的目标是发现某些模式这些模式捕捉到了我们训练集潜在总体的规律。如果成功做到了这点即使是对以前从未遇到过的个体模型也可以成功地评估风险。如何发现可以泛化的模式是机器学习的根本问题。 困难在于当我们训练模型时我们只能访问数据中的小部分样本。最大的公开图像数据集包含大约一百万张图像。而在大部分时候我们只能从数千或数万个数据样本中学习。在大型医院系统中我们可能会访问数十万份医疗记录。当我们使用有限的样本时可能会遇到这样的问题当收集到更多的数据时会发现之前找到的明显关系并不成立。 将模型在训练数据上拟合的比在潜在分布中更接近的现象称为过拟合overfitting用于对抗过拟合的技术称为正则化regularization。在前面的章节中有些读者可能在用Fashion-MNIST数据集做实验时已经观察到了这种过拟合现象。在实验中调整模型架构或超参数时会发现如果有足够多的神经元、层数和训练迭代周期模型最终可以在训练集上达到完美的精度此时测试集的准确性却下降了。 4.4.1 Training Error and Generalization Error 训练误差training error指模型在训练数据集上计算得到的误差。泛化误差generalization error指模型应用在同样从原始样本的分布中抽取的无限多数据样本时模型误差的期望。问题是我们永远不能准确地计算出泛化误差。这是因为无限多的数据样本是一个虚构的对象。在实际中我们只能通过将模型应用于一个独立的测试集来估计泛化误差该测试集由随机选取的、未曾在训练集中出现的数据样本构成。 考虑一个简单地使用查表法来回答问题的模型。如果允许的输入集合是离散的并且相当小那么也许在查看许多训练样本后该方法将执行得很好。但当这个模型面对从未见过的例子时它表现的可能比随机猜测好不到哪去。这是因为输入空间太大了远远不可能记住每一个可能的输入所对应的答案。例如考虑 28 × 28 28\times28 28×28的灰度图像。如果每个像素可以取 256 256 256个灰度值中的一个则有 25 6 784 256^{784} 256784个可能的图像。这意味着指甲大小的低分辨率灰度图像的数量比宇宙中的原子要多得多。即使我们可能遇到这样的数据我们也不可能存储整个查找表。 最后考虑对掷硬币的结果类别0正面类别1反面进行分类的问题。假设硬币是公平的无论我们想出什么算法泛化误差始终是 1 2 \frac{1}{2} 21​。然而对于大多数算法我们应该期望训练误差会更低取决于运气。考虑数据集{011101}。我们的算法不需要额外的特征将倾向于总是预测多数类从我们有限的样本来看它似乎是1占主流。在这种情况下总是预测类1的模型将产生 1 3 \frac{1}{3} 31​的误差这比我们的泛化误差要好得多。当我们逐渐增加数据量正面比例明显偏离 1 2 \frac{1}{2} 21​的可能性将会降低我们的训练误差将与泛化误差相匹配。 4.4.1.1 I.I.D. Assumption 在我们目前已探讨、并将在之后继续探讨的监督学习情景中我们假设训练数据和测试数据都是从相同的分布中独立提取的。这通常被称为独立同分布假设i.i.d. assumption这意味着对数据进行采样的过程没有进行“记忆”。换句话说抽取的第2个样本和第3个样本的相关性并不比抽取的第2个样本和第200万个样本的相关性更强。 要成为一名优秀的机器学习科学家需要具备批判性思考能力。假设是存在漏洞的即很容易找出假设失效的情况。如果我们根据从加州大学旧金山分校医学中心的患者数据训练死亡风险预测模型并将其应用于马萨诸塞州综合医院的患者数据结果会怎么样这两个数据的分布可能不完全一样。此外抽样过程可能与时间有关。比如当我们对微博的主题进行分类时新闻周期会使得正在讨论的话题产生时间依赖性从而违反独立性假设。 有时候我们即使轻微违背独立同分布假设模型仍将继续运行得非常好。比如我们有许多有用的工具已经应用于现实如人脸识别、语音识别和语言翻译。毕竟几乎所有现实的应用都至少涉及到一些违背独立同分布假设的情况。 有些违背独立同分布假设的行为肯定会带来麻烦。比如我们试图只用来自大学生的人脸数据来训练一个人脸识别系统然后想要用它来监测疗养院中的老人。这不太可能有效因为大学生看起来往往与老年人有很大的不同。 在接下来的章节中我们将讨论因违背独立同分布假设而引起的问题。目前即使认为独立同分布假设是理所当然的理解泛化性也是一个困难的问题。此外能够解释深层神经网络泛化性能的理论基础也仍在继续困扰着学习理论领域的学者们。当我们训练模型时我们试图找到一个能够尽可能拟合训练数据的函数。但是如果它执行地“太好了”而不能对看不见的数据做到很好泛化就会导致过拟合。这种情况正是我们想要避免或控制的深度学习中有许多启发式的技术旨在防止过拟合。 4.4.1.2 Model Complexity 当我们有简单的模型和大量的数据时我们期望泛化误差与训练误差相近。当我们有更复杂的模型和更少的样本时我们预计训练误差会下降但泛化误差会增大。模型复杂性由什么构成是一个复杂的问题。一个模型是否能很好地泛化取决于很多因素。例如具有更多参数的模型可能被认为更复杂参数有更大取值范围的模型可能更为复杂。通常对于神经网络我们认为需要更多训练迭代的模型比较复杂而需要早停early stopping的模型即较少训练迭代周期就不那么复杂。 本节为了给出一些直观的印象我们将重点介绍几个倾向于影响模型泛化的因素。 可调整参数的数量。当可调整参数的数量有时称为自由度很大时模型往往更容易过拟合。参数采用的值。当权重的取值范围较大时模型可能更容易过拟合。训练样本的数量。即使模型很简单也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。 4.4.2 Model Selection 在机器学习中我们通常在评估几个候选模型后选择最终的模型,这个过程叫做模型选择。我们有时需要进行比较的模型在本质上是完全不同的如决策树与线性模型有时又需要比较不同的超参数设置下的同一类模型。 4.4.2.1 Validation Dataset 训练多层感知机模型时我们可能希望比较具有不同数量的隐藏层、不同数量的隐藏单元以及不同的激活函数组合的模型。为了确定候选模型中的最佳模型我们通常会使用验证集。原则上在我们确定所有的超参数之前我们不希望用到测试集。如果我们在模型选择过程中使用测试数据可能会有过拟合测试数据的风险那就麻烦大了。如果我们过拟合了训练数据还可以在测试数据上的评估来判断过拟合。但是如果我们过拟合了测试数据我们又该怎么知道呢 因此我们决不能依靠测试数据进行模型选择。然而我们也不能仅仅依靠训练数据来选择模型因为我们无法估计训练数据的泛化误差。在实际应用中情况变得更加复杂。虽然理想情况下我们只会使用测试数据一次以评估最好的模型或比较一些模型效果但现实是测试数据很少在使用一次后被丢弃。我们很少能有充足的数据来对每一轮实验采用全新测试集。 解决此问题的常见做法是将我们的数据分成三份除了训练和测试数据集之外还增加一个验证数据集validation dataset也叫验证集validation set。但现实是验证数据和测试数据之间的边界模糊得令人担忧。除非另有明确说明否则在这本书的实验中我们实际上是在使用应该被正确地称为训练数据和验证数据的数据集并没有真正的测试数据集。因此书中每次实验报告的准确度都是验证集准确度而不是测试集准确度。 4.4.2.2 K-Fold Cross Validation 当训练数据稀缺时我们甚至可能无法提供足够的数据来构成一个合适的验证集。这个问题的一个流行的解决方案是采用 K K K折交叉验证。这里原始训练数据被分成 K K K个不重叠的子集。然后执行 K K K次模型训练和验证每次在 K − 1 K-1 K−1个子集上进行训练并在剩余的一个子集在该轮中没有用于训练的子集上进行验证。最后通过对 K K K次实验的结果取平均来估计训练和验证误差。 4.4.3 Underfitting and Overfitting 当我们比较训练和验证误差时我们要注意两种常见的情况。首先我们要注意这样的情况训练误差和验证误差都很严重但它们之间仅有一点差距。如果模型不能降低训练误差这可能意味着模型过于简单即表达能力不足无法捕获试图学习的模式。此外由于我们的训练和验证误差之间的泛化误差很小我们有理由相信可以用一个更复杂的模型降低训练误差。这种现象被称为欠拟合underfitting。 另一方面当我们的训练误差明显低于验证误差时要小心这表明严重的过拟合overfitting。注意过拟合并不总是一件坏事。特别是在深度学习领域众所周知最好的预测模型在训练数据上的表现往往比在保留验证数据上好得多。最终我们通常更关心验证误差而不是训练误差和验证误差之间的差距。 是否过拟合或欠拟合可能取决于模型复杂性和可用训练数据集的大小这两点将在下面进行讨论。 4.4.3.1 Model Complexity 为了说明一些关于过拟合和模型复杂性的经典直觉我们给出一个多项式的例子。给定由单个特征 x x x和对应实数标签 y y y组成的训练数据我们试图找到下面的 d d d阶多项式来估计标签 y y y。 y ^ ∑ i 0 d x i w i \hat{y} \sum_{i0}^d x^i w_i y^​i0∑d​xiwi​ 这只是一个线性回归问题我们的特征是 x x x的幂给出的模型的权重是 w i w_i wi​给出的偏置是 w 0 w_0 w0​给出的因为对于所有的 x x x都有 x 0 1 x^0 1 x01。由于这只是一个线性回归问题我们可以使用平方误差作为我们的损失函数。 高阶多项式的参数较多模型函数的选择范围较广。因此在固定训练数据集的情况下高阶多项式函数相对于低阶多项式的训练误差应该始终更低最坏也是相等。事实上当数据样本包含了 x x x的不同值时函数阶数等于数据样本数量的多项式函数可以完美拟合训练集。下图直观地描述了多项式的阶数和欠拟合与过拟合之间的关系。 4.4.3.2 Dataset Size 另一个重要因素是数据集的大小。训练数据集中的样本越少我们就越有可能且更严重地过拟合。随着训练数据量的增加泛化误差通常会减小。一般来说更多的数据不会有什么坏处。对于固定的任务和数据分布模型复杂性和数据集大小之间通常存在关系。给出更多的数据我们可能会尝试拟合一个更复杂的模型。能够拟合更复杂的模型可能是有益的。如果没有足够的数据简单的模型可能更有用。对于许多任务深度学习只有在有数千个训练样本时才优于线性模型。从一定程度上来说深度学习目前的生机要归功于廉价存储、互联设备以及数字化经济带来的海量数据集。 4.4.4 Polynomial Regression 给定 x x x我们将使用以下三阶多项式来生成训练和测试数据的标签 y 5 1.2 x − 3.4 x 2 2 ! 5.6 x 3 3 ! ϵ ,where  ϵ ∼ N ( 0 , 0. 1 2 ) . y 5 1.2x - 3.4\frac{x^2}{2!} 5.6 \frac{x^3}{3!} \epsilon \text{,where } \epsilon \sim \mathcal{N}(0, 0.1^2). y51.2x−3.42!x2​5.63!x3​ϵ,where ϵ∼N(0,0.12). 在优化的过程中我们通常希望避免非常大的梯度值或损失值这就是我们将特征从 x i x^i xi调整为 x i i ! \frac{x^i}{i!} i!xi​的原因。我们将为训练集和测试集各生成100个样本具体代码如下 import math import numpy as np import torch from torch import nn from d2l import torch as d2l import matplotlib.pyplot as pltmax_degree20 #多项式最大阶数 n_train,n_test100,100 #训练集和测试集大小 true_wnp.zeros(max_degree) true_w[0:4]np.array([5,1.2,-3.4,5.6])#generates n_train n_test random samples from a normal distribution with mean 0 and standard deviation 1 featuresnp.random.normal(size(n_trainn_test,1)) np.random.shuffle(features) #raises each element in the features vector to the power of the corresponding degrees from 0 to max_degree - 1. poly_featuresnp.power(features,np.arange(max_degree).reshape(1,-1)) for i in range(max_degree):poly_features[:,i]/math.gamma(i1) #gamma(n)(n-1)! #labels的维度(n_trainn_test,) labelsnp.dot(poly_features,true_w) labelsnp.random.normal(scale0.1,sizelabels.shape)#Gaussian noise is added to the labels# NumPy ndarray转换为tensor true_w, features, poly_features, labels [torch.tensor(x, dtypetorch.float32) for x in [true_w, features, poly_features, labels]]print(features[:2], poly_features[:2, :], labels[:2])def evaluate_loss(net, data_iter, loss): #save评估给定数据集上模型的损失metric d2l.Accumulator(2) # 损失的总和,样本数量for X, y in data_iter:out net(X)y y.reshape(out.shape)l loss(out, y)metric.add(l.sum(), l.numel())return metric[0] / metric[1]#定义训练函数 def train(train_features, test_features, train_labels, test_labels,num_epochs400):loss nn.MSELoss(reductionnone)input_shape train_features.shape[-1]# 不设置偏置因为我们已经在多项式中实现了它net nn.Sequential(nn.Linear(input_shape, 1, biasFalse))batch_size min(10, train_labels.shape[0])train_iter d2l.load_array((train_features, train_labels.reshape(-1,1)),batch_size)test_iter d2l.load_array((test_features, test_labels.reshape(-1,1)),batch_size, is_trainFalse)trainer torch.optim.SGD(net.parameters(), lr0.01)animator d2l.Animator(xlabelepoch, ylabelloss, yscalelog,xlim[1, num_epochs], ylim[1e-3, 1e2],legend[train, test])for epoch in range(num_epochs):d2l.train_epoch_ch3(net, train_iter, loss, trainer)if epoch 0 or (epoch 1) % 20 0:animator.add(epoch 1, (evaluate_loss(net, train_iter, loss),evaluate_loss(net, test_iter, loss)))print(weight:, net[0].weight.data.numpy())#三阶多项式函数拟合(正常,训练出的参数接近真实值) # 从多项式特征中选择前4个维度即1,x,x^2/2!,x^3/3! train(poly_features[:n_train, :4], poly_features[n_train:, :4],labels[:n_train], labels[n_train:]) plt.show()#线性函数拟合(欠拟合) # 从多项式特征中选择前2个维度即1和x train(poly_features[:n_train, :2], poly_features[n_train:, :2],labels[:n_train], labels[n_train:]) plt.show()#高阶多项式函数拟合(过拟合) # 从多项式特征中选取所有维度 train(poly_features[:n_train, :], poly_features[n_train:, :],labels[:n_train], labels[n_train:], num_epochs1500) plt.show()正常效果 欠拟合效果 过拟合效果
http://www.dnsts.com.cn/news/110326.html

相关文章:

  • 商丘网站建设哪家好班级优化大师
  • 网站开发新技术探索石家庄市建设厅网站
  • 淞南网站建设宁波建设网站制作
  • 创建企业网站建网站程序下载
  • 西宁市建设网站多少钱wordpress分类目录查不到文章
  • 深圳宝安西乡网站建设wordpress 用户私信功能
  • 怎样建设文章网站云南建设投资集团网站
  • 哈尔滨网站制作推广郴州网站小程序
  • 爱站工具包的模块北京工程造价信息网官网
  • 两学一做网站飘窗WordPress自定义登录页面
  • 网站开发安卓开发个人网站如何建立
  • 灌南网站建设wordpress加载图片很慢
  • 网站建设专题页网站建设包括什么
  • 中国铁路建设集团公司网站网站页面做
  • 手机排名快照首页排名优化服务
  • 湖北智能网站建设推荐工程公司管理软件
  • 怎么做网站策划企业网站的制作周期
  • 百度上做网站模板类似wordpress博客
  • 深圳专业专业网站建设信息时代网站建设的重要性
  • 织梦可以做论坛网站郑州做网站网络公司
  • 北京邢台企业商会网站c语言做网站后台服务
  • 怎么修改网站首页html代码亚马逊跨境电商挣钱吗
  • php做的卖水果网站番禺高端网站建设
  • 天津网站搜索排名小程序营销
  • 网站设计做图工具交互设计大学世界排名
  • 廊坊网站建设团队个人网站作业
  • 安阳 网站建设做pc端网站要多少钱
  • dw做网站一般需要多大尺寸品牌策划流程
  • 怎么做网上直营店网站html5主题 wordpress
  • wordpress如何上传网页sem和seo是什么