《neural network and deep learning》题解——ch03 如何选择神经网络的超参数

2024-06-02 04:38

本文主要是介绍《neural network and deep learning》题解——ch03 如何选择神经网络的超参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/u011239443/article/details/77748116

问题一

上一节有问题也是调参,我们在这里讲解:

更改上面的代码来实现 L1 规范化,使用 L1 规范化使用 30 个隐藏元的神经网络对 MNIST数字进行分类。你能够找到一个规范化参数使得比无规范化效果更好么?

如何修改代码可参阅上节:http://blog.csdn.net/u011239443/article/details/77649026#t5

当无规范化时,我们将上节的代码update_mini_batch中做修改:

self.weights = [w - (eta / len(mini_batch)) * nw for w, nw inzip(self.weights, nabla_w)]

total_cost中去掉:

cost += 0.5 * (lmbda / len(data)) * sum(np.linalg.norm(w) ** 2 for w in self.weights)

为了加快我们的训练,我们使得将训练集设置为1000,验证集设置为100:

net.SGD(training_data[:1000],30,10,0.5,evaluation_data=validation_data[:100],monitor_evaluation_accuracy=True)

结果:

Epoch 30 training complete
Acc on evaluation: 17 / 100

加入 L1 , λ = 100.0 时,结果:

Epoch 30 training complete
Acc on evaluation: 11 / 100

λ = 10.0 时,结果:

Epoch 29 training complete
Acc on evaluation: 11 / 100

λ = 1.0 时,结果:

Epoch 30 training complete
Acc on evaluation: 31 / 100

所以当λ = 1.0 时使,可以使得比无规范化效果更好。

问题二

修改 network2.py 来实现提前终止,并让 n 回合不提升终止策略中的 n 称为可以设置的参数。

随机梯度函数多加一个参数max_try:

    def SGD(self, training_data, epochs, mini_batch_size, eta,lmbda=0.0,evaluation_data=None,monitor_evaluation_cost=False,monitor_evaluation_accuracy=False,monitor_training_cost=False,monitor_training_accuray=False,max_try = 100):

cnt 记录不提升的次数,如达到max_try,就退出循环。这里用monitor_evaluation_accuracy举例:

        cnt = 0for j in xrange(epochs):......if monitor_evaluation_accuracy:acc = self.accuracy(evaluation_data)evaluation_accurary.append(acc)if len(evaluation_accurary) > 1 and acc < evaluation_accurary[len(evaluation_accurary)-2]:cnt += 1if cnt >= max_try:breakelse:cnt = 0print "Acc on evaluation: {} / {}".format(acc, n_data)......

问题三

你能够想出不同于 n 回合不提升终止策略的其他提前终止策略么?理想中,规则应该能够获得更高的验证准确率而不需要训练太久。将你的想法实现在 network2.py 中,运行这些实验和 3 回合(10 回合太多,基本上训练全部,所以改成 3)不提升终止策略比较对应的验证准确率和训练的回合数。

策略与实现

多一个参数x,当提升率小于x,则停止。

随机梯度函数多加一个参数max_x:

    def SGD(self, training_data, epochs, mini_batch_size, eta,lmbda=0.0,evaluation_data=None,monitor_evaluation_cost=False,monitor_evaluation_accuracy=False,monitor_training_cost=False,monitor_training_accuray=False,min_x = 0.01):

当提升率小于x,则停止。这里用monitor_evaluation_accuracy举例:

            if monitor_evaluation_accuracy:acc = self.accuracy(evaluation_data)evaluation_accurary.append(acc)if len(evaluation_accurary) > 1 and \(acc - evaluation_accurary[len(evaluation_accurary)-2])*1.0/(1.0*n_data) < min_x:breakprint "Acc on evaluation: {} / {}".format(acc, n_data)

对比

10 回合不提升终止策略:

net.SGD(training_data[:1000],50,10,0.25,5.0,evaluation_data=validation_data[:100],monitor_evaluation_accuracy=True,max_try=3)

的结果:

Epoch 32 training complete
Acc on evaluation: 15 / 100

提升率小于x停止策略:

Epoch 3 training complete
Acc on evaluation: 17 / 100

问题四

更改 network2.py 实现学习规则:每次验证准确率满足满足 10 回合不提升终止策略时改变学习速率;当学习速率降到初始值的 1/128 时终止。

对问题二中的代码进行稍微的修改,128 = 2 ^ 7 。所以,多加个计数 del_cnt 记录学习率减小的次数:

        cnt = 0del_cnt = 0for j in xrange(epochs):......if monitor_evaluation_accuracy:acc = self.accuracy(evaluation_data)evaluation_accurary.append(acc)if len(evaluation_accurary) > 1 and acc < evaluation_accurary[len(evaluation_accurary)-2]:cnt += 1if cnt >= max_try:del_cnt += 1if del_cnt >= 7:breaketa /= 2.0cnt = 0   else:cnt = 0print "Acc on evaluation: {} / {}".format(acc, n_data)

问题五

使用梯度下降来尝试学习好的超参数的值其实很受期待。你可以想像关于使用梯度下降来确定 λ 的障碍么?你能够想象关于使用梯度下降来确定 η 的障碍么?

  • 使用梯度下降来确定 λ 的障碍在于,

    得:
    $ \frac{∂C}{∂λ} = \frac{\sum_ww^2}{2n} = 0$
    最优化目标使得 w = 0,但是 w 也是我们原来需要优化的。

  • 使用梯度下降来确定 η 的障碍在于,η 的最优解不是一个常数,随着迭代次数的增加,η 的最优解会越来越小。

这里写图片描述

这篇关于《neural network and deep learning》题解——ch03 如何选择神经网络的超参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023053

相关文章

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte