跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)
1. 在我们学习中,调试超参数是非常重要的。
超参数的调试可以是a学习率,(β1和β2,ε)在Adam梯度下降中使用, layers层数, hidden units 隐藏层的数目,
learning_rate_dacay 学习率衰减, mini-batch size 每次迭代的样本数目
当需要调节的参数的数目较多时,我们通常使用随机参数选择进行参数调节.
比如学习率的范围为0.0001 - 1 , 在0.0001-0.001之间,样本随学习率的变化较大,因此有必要增加这部分的权重,我们使用log函数
a_1 = log10(0.0001) = -4
a_2 = log10(1) = 0
r = -4 * np.random.randn() (生成-4-0的数字)
a = 10^r 来决定学习率
还有β1的范围为0.9-0.999
1-β1= 0.0001-0.1
β_1 = log10(0.0001) = -4
β_2 = log10(0.1) = -1
r = -4*np,random.randn(0.25, 1)
β1 =1 - 10^r
2. batch归一化
μ = 1/mΣZ(i) #表示输入样本的所有均值
δ2 = 1/mΣ(Z(i) - μ) #表示方差
Z(i) = (Z(i) - μ) / (np.sqrt(δ2 + ε)) #进行归一化操作 ε防止分母出现0的出现
Z(i) = γ*Z(i) + β # 为了使得Z(i) 的取值范围更大,在后续的激活函数中表现得更多样
此时的反向传播的训练参数为
w := w - a * dw
γ := γ - a * dγ
β := β - a * dβ
由于进行了去均值的操作,所以使得b就被消去了
batch归一化的作用,使得前层数据不会变得那么多变,使得当前层的训练变得更加独立和容易,对前一层的依赖也就越少,
由于计算的均值和标准差,使得一定的噪音信号产生,有点类似dropout,使得训练算法不过分依赖某些神经元,起到了轻微的正则化的作用
下面是tensorflow实现的,使用的是RMS梯度下降
conv_bn = tf.contrib.layers.batch_norm(conv, momentum, scale=True, epsilon=1e-5,is_training = self.training, scope=names)
scale是指系数λ。
实际在搭建好包含BN层的网络之后,进行训练时需要注意使用如下模式代码: rmsprop = tf.train.RMSPropOptimizer(learning_rate= self.lr)
with tf.control_dependencies(self.update_ops):
self.train_rmsprop = rmsprop.minimize(loss)
3.softmax使用
对于logistics回归,是一个参数输入一个参数输出,
对于softmax实现的是一个多分类问题,输入是1*4, 输出也是1*4
Z[l] = W[l] * a[l-1] + b[l]
t = e^(Z[l])
a(i)[l] = t(i) / Σ(t(i))
举例说明
z[l] = [5, 2, -1, 3]
t = [148.4, 7.4, 0.4, 20.1]
a = [0.842, 0.042, 0.002, 0.114]
我们在做这类标签时,
y = [0, 1, 0, 0]
y_1 = [0.3, 0,2, 0.1, 0.4] #y_1表示softmax的输出值
loss(y_1, y) = - Σy*logy_1 = -logy_1(2) 即保证y_1的第二数越来越大
y = [y[1], y[2], y[m]] # m 表示样本的个数, y的样本shape为(4, m)
j = 1/mΣloss(y_1, y) # 总的损失函数
4. tensorflow 框架举例
import numpy as np
import tensorflow as tf coffitent = np.array([[0.1], [0.2], [0.3]])
w = tf.Variable(0, dtype=tf.float32)
# cost = (tf.add(w**2, tf.multiply(-10, w)), 25)
# 表示迟点输入x
x = tf.placeholder(tf.float32, [3, 1])
# cost = w**2 - 10*w + 25
cost = x[0][0]*w**2 + x[1][0]*w + x[2][0] train = tf.train.GradientDescentOptimizer(0.001).minimize(cost) init = tf.global_variables_initializer()
session = tf.Session()
session.run(init)
print(session.run(w)) session.run(train, feed_dict={x:coffitent})
print(session.run(w)) for i in range(1000):
# feed_dict 表示需要输入的参数
session.run(train, feed_dict={x:coffitent})
print(session.run(w))
跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)的更多相关文章
- 跟我学算法-吴恩达老师(mini-batchsize,指数加权平均,Momentum 梯度下降法,RMS prop, Adam 优化算法, Learning rate decay)
1.mini-batch size 表示每次都只筛选一部分作为训练的样本,进行训练,遍历一次样本的次数为(样本数/单次样本数目) 当mini-batch size 的数量通常介于1,m 之间 当 ...
- 跟我学算法-吴恩达老师的logsitic回归
logistics回归是一种二分类问题,采用的激活函数是sigmoid函数,使得输出值转换为(0,1)之间的概率 A = sigmoid(np.dot(w.T, X) + b ) 表示预测函数 dz ...
- 机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 http://www.ai-start.com/
机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 GNU Octave 开源 MatLab http://www.ai-start.com/ https://zhuanlan.zhihu ...
- 吴恩达课后习题第二课第三周:TensorFlow Introduction
目录 第二课第三周:TensorFlow Introduction Introduction to TensorFlow 1 - Packages 1.1 - Checking TensorFlow ...
- 【Deeplearning.ai 】吴恩达深度学习笔记及课后作业目录
吴恩达深度学习课程的课堂笔记以及课后作业 代码下载:https://github.com/douzujun/Deep-Learning-Coursera 吴恩达推荐笔记:https://mp.weix ...
- 吴恩达讲了干货满满的一节全新AI课,全程手写板书充满诚意非常干货
吴恩达讲了干货满满的一节全新AI课,全程手写板书充满诚意非常干货 摘要: 目前,AI技术做出的经济贡献几乎都来自监督学习,也就是学习从A到B,从输入到输出的映射.现在,监督学习.迁移学习.非监督学习. ...
- 吴恩达最新TensorFlow专项课程开放注册,你离TF Boy只差这一步
不需要 ML/DL 基础,不需要深奥数学背景,初学者和软件开发者也能快速掌握 TensorFlow.掌握人工智能应用的开发秘诀. 以前,吴恩达的机器学习课程和深度学习课程会介绍很多概念与知识,虽然也会 ...
- 吴恩达(Andrew Ng)——机器学习笔记1
之前经学长推荐,开始在B站上看Andrew Ng的机器学习课程.其实已经看了1/3了吧,今天把学习笔记补上吧. 吴恩达老师的Machine learning课程共有113节(B站上的版本https:/ ...
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
随机推荐
- 利用Bomb打造自己的小程序
小程序开发 Bomb免费后端云开发 首先,小程序的开发已是热门,一个前段技术人员必备的技术就是开发小程序.在这里推荐一个入门小程序文章(连胜出品). 对于小程序的入门开发就不再做详细介绍,这里针对Bm ...
- Hello World模式
http://www.rabbitmq.com/getstarted.html https://github.com/rabbitmq/rabbitmq-tutorials 环境搭建 这里使用grad ...
- HDFS读写流程
01.并行读取 02.逐个节点写入
- C# Seal用法
C# Seal用法 sealed的中文意思是密封,故名思义,就是由它修饰的类或方法将不能被继承或是重写. sealed关键字的作用: 在类声明中使用sealed可防止其它类继承此类:在方法声明 ...
- JS数组中级+高级技巧
本文介绍JS数组一些比较进阶的方法: reverse:数组反转: join:(参数)以参数为连接符将数组拼接为字符串: 实例: var arr=[]; arr[3]="haha"; ...
- SVM大致思路整理
(一)线性可分 我们忽略建立目标函数的过程,直接写出目标函数. 原问题: 首先,我们得到了目标函数: 这是一个凸优化问题,直接可以用软件可以求解: 对偶问题: 原问题根据一系列的变换,可写成: 满足某 ...
- 使用 Windows 10 中的加速度计(Accelerometer,重力传感器)
在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果. Windows 10 UWP 中的加速 ...
- 2018-2019-2 《网络对抗技术》Exp3免杀原理与实践 20165222
1. 实践内容 1.1 正确使用msf编码器 使用 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 7 -b ...
- HDU 3973 AC's String 字符串哈希
HDU 3973 通过哈希函数将一个字符串转化为一个整数,通过特定的方式可以使得这个哈希值几乎没有冲突(这就是关键之处,几乎没有视为没有= =!, 其实也可以考虑实现哈希冲突时的处理,只是这道题没必要 ...
- 打造基于jQuery的智能选择输入框
UPDATE:修正了在FireFox下显示的问题,重新copy CSS即可 写完这个名字忽然觉得有点标题党的嫌疑,但是又不知道什么样的名字比较合适,那就暂且这样吧. 今天要讲的东西比较简单,其中会用到 ...