博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)...
阅读量:6830 次
发布时间:2019-06-26

本文共 2367 字,大约阅读时间需要 7 分钟。

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 npimport tensorflow as tfcoffitent = 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)# 表示迟点输入xx = tf.placeholder(tf.float32, [3, 1])# cost = w**2 - 10*w + 25cost = 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))

 

转载于:https://www.cnblogs.com/my-love-is-python/p/9720413.html

你可能感兴趣的文章
Go中的make和new的区别
查看>>
javascript 面向对象编程(工厂模式、构造函数模式、原型模式)
查看>>
最小二乘法多项式拟合的Java实现
查看>>
ubuntu下安装tomcat
查看>>
Excel两列查找重复值
查看>>
纯CSS实现Div高度根据自适应宽度(百分百调整)
查看>>
Azkaban学习之路 (一)Azkaban的基础介绍
查看>>
域名绑定云主机
查看>>
Linux: grep多个关键字“与”和“或”
查看>>
CAS5.2x单点登录(二)cas服务器连接数据库
查看>>
Android tess_two Android图片文字识别
查看>>
高负载微服务系统的诞生过程
查看>>
maven生命周期理解
查看>>
JS基础之传参(值传递、对象传递)
查看>>
(转)几种经典的hash算法
查看>>
Content Security Policy (CSP) 介绍
查看>>
DevExpress去除多国语言包
查看>>
numpy初始化
查看>>
移植gdb到海思3716板子的方法【转】
查看>>
为什么一些机器学习模型需要对数据进行归一化?
查看>>