1、超参数调试:

(1)超参数寻找策略:

对于所有超参数遍历求最优参数不可取,因为超参数的个数可能很多,可选的数据过于庞大.

由于最优参数周围的参数也可能比较好,所以可取的方法是:在一定的尺度范围内随机取值,先寻找一个较好的参数,再在该参数所在的区域更精细的寻找最优参数.

(2)选择合适的超参数范围:

假设 n[l] 可选取值 50~100:在整个范围内随机均匀取值

选取神经网络层数 #layers,L的可选取值为 2~4:在整个范围内随机均匀取值

学习速率 α 的可选取值 0.0001~1:在对数轴上随机均匀取值

β 的可选取值 0.9~0.999:在 1-β 的对数轴上随机均匀取值

  

2、Batch归一化:

(1)问题背景:

       a[1]     a[2]      a[3]

之前介绍的正则化输入是对 X 进行正则化,那么能否对 a[2] 进行正则化(本质是对 z[2] 正则化),以更快地训练 w[3] 和 b[3] ?

(2)Batch归一化流程:

给出参数:Z(1) ... Z(m)

其中 γ 和 β 为学习参数,作用是:可以随意设置 Z~(i) 的平均值和方差.

传播过程:

X — w[1],b[1] —> Z[1]γ[1], β[1] —> Z~[1]g(Z~[1]—> A[1]w[2],b[2] —> Z[2] — ... —> Y^

需要优化的参数:

W[1], b[1], ..., W[L], b[L]

γ[1], β[1], ..., γ[L], β[L]

一个小的简化:

由于在计算 Z~(i) 前会通过正则化把均值设成0,那么参数 b 可以不用加上.

(3)应用:

for t = 1 ... num_MiniBatches:

  Compute forward prop on X{t}

  In each hidden layer,use Batch Norm to replace Z[l] with Z~[l]

  Use backprop to compute dW[l], dβ[l], dγ[l]

  Update parameters W[l], β[l], γ[l]

(Work with momentum、RMSprop、Adam)

3、Softmax回归:

(1)举例说明:

Softmax回归适用于多类别分类,以4分类为例:

神经网络模型:

假设 Z[L] = [5, 2, -1, 3]T

t = [e5, e2, e-1, e3]T ≈ [148.4, 7.4, 0.4, 20.1]T

∑ t = 176.3

a[L] = t / ∑ t = [0.842, 0.042, 0.002, 0.114]T

即是分类0的概率是0.842,分类1的概率是0.042,分类2的概率是0.002,分类3的概率是0.114.

(2)Softmax分类器损失函数:

训练结果集:Y = [y(1), y(2), ..., y(m)],每一个 y(i) 都是一个列向量.

预测结果集:Y^ = [y^(1), y^(2), ..., y^(m)]

单个训练样本的损失函数: L(y^, y) = - ∑ yj * log(y^j)

整个训练集的损失函数:J(w[1], b[1], ...) = 1 / m * ∑ L(y^(i), y(i))

4、TensorFlow使用举例:

最小化 J = (w - 5)² = w² - 10w + 25:

(1)写法①:

w = tf.Variable(0, dtype = tf.float32)

cost = tf.add(tf.add(w**2, tf.multiply(-10, w)), 25)

train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

init = tf.global_variables_initializer()

session = tf.Session()

session.run(init)

print(session.run(w))

#输出0.0

for i in range(1000):

  session.run(train)

print(session.run(w))

#输出4.99999

(2)写法②:

coefficients = np.array([[1.], [-10.], [25.]])

w = tf.Variable(0, dtype = tf.float32)

x = tf.placeholder(tf.float32, [3,1])

cost = x[0][0]*w**2 + x[1][0]*w + x[2][0]

train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

init = tf.global_variables_initializer()

session = tf.Session()

session.run(init)

print(session.run(w))

#输出0.0

for i in range(1000):

  session.run(train, feed_dicts(x:coefficients))

print(session.run(w))

#输出4.99999

改善深层神经网络(三)超参数调试、Batch正则化和程序框架的更多相关文章

  1. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

  2. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 Batch归一化 Softmax

    摘抄:https://xienaoban.github.io/posts/2106.html 1. 调试(Tuning) 超参数 取值 #学习速率:\(\alpha\) Momentum:\(\bet ...

  3. DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

    1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我 ...

  4. Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 2. 优化算法)

    ===========第2周 优化算法================ ===2.1 Mini-batch 梯度下降=== epoch: 完整地遍历了一遍整个训练集 ===2.2 理解Mini-bat ...

  5. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch正则化和程序框架 听课笔记

    这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4* ...

  6. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架

    这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4* ...

  7. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 正则化以及梯度相关

    笔记:Andrew Ng's Deeping Learning视频 参考:https://xienaoban.github.io/posts/41302.html 参考:https://blog.cs ...

  8. 吴恩达《深度学习》第二门课(3)超参数调试、Batch正则化和程序框架

    3.1调试处理 (1)不同超参数调试的优先级是不一样的,如下图中的一些超参数,首先最重要的应该是学习率α(红色圈出),然后是Momentum算法的β.隐藏层单元数.mini-batch size(黄色 ...

  9. 跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)

    1. 在我们学习中,调试超参数是非常重要的. 超参数的调试可以是a学习率,(β1和β2,ε)在Adam梯度下降中使用, layers层数, hidden units 隐藏层的数目, learning_ ...

随机推荐

  1. ELK学习003:Elasticsearch启动常见问题

    一.Caused by: java.lang.RuntimeException: can not run elasticsearch as root 这个错误,是因为使用root用户启动elastic ...

  2. opencv中的图像矩(空间矩,中心矩,归一化中心矩,Hu矩)

    严格来讲矩是概率与统计中的一个概念,是随机变量的一种数字特征.设 x 为随机变量,C为常数,则量E[(x−c)^k]称为X关于C点的k阶矩.比较重要的两种情况如下: 1.c=0,这时a_k=E(X^k ...

  3. [TJOI2014] 匹配

    注:此题无序,也无嵬 正文 我们这题求得事实上是一个最大费用最大流,最后的对每条边进行枚举,额然后,如果最大费用小了,就计入答案.. 算是,比较水吧 还有,一开始WA了两次是因为,dis应初始化为负无 ...

  4. C# monitor keyboard and print pressed key

    using System; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Diagnos ...

  5. oracle数据库应用开发经验

    l  日志表应该以时间做分区,方便清理 一般应用都会有一些表用来记录用户操作日志,数据变更记录,交易流水等日志型的库表.这些表最好按时间字段做分区,这样在迁移或者清理历史记录时会比较方便,借助orac ...

  6. Java JDK 1.8 安装及配置

    1.下载 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 要注册,注 ...

  7. 怎么在IDEA中给方法添加分割线?

    方法中间分割不清晰 怎么在IDEA中给方法添加分割线呢? 效果如图 方法上有一条分割线,比较明了 按照下列顺序点击修改设置即可 File→Settings→Editor→General→Appeara ...

  8. Linux中为什么执行自己的程序要在前面加./

    前言   在Linux中,我们执行内置命令时,直接输入命令名称即可,如: $ mv a b #将a重命名为b   而在执行自己写好的程序时,却要带上./,例如: $ hello hello: comm ...

  9. PHP0009:PHP基础-mysql

    以管理员省份启动记事本 修改host文件 插入外部sql数据

  10. 春节过后就是金三银四求职季,分享几个Java面试妙招,轻松搞定HR!

    春节过后就是金三银四,分享几个Java面试妙招,轻松搞定HR! 2020年了,先祝大家新年快乐! 今年IT职位依然相当热门,特别是Java开发岗位.软件开发人才在今年将有大量的就业机会.春节过后,金三 ...