decay_rate, decay_steps ,batchsize,iteration,epoch

python实现DQN 1、原理 利用贝尔曼方程更新Q表 对于s可以到达s1的Q(s,a) := R + gamma * max(Q(s+1)) 对于s不可以到达s1的Q(s,a) :=R 注意的是,在刚刚开始训练的时候应该尽可能的让agent尝试不同的action,随着训练的增加在慢慢选择最大Q的action 2、代码 import gym import numpy as np import tensorflow as tf from collections import deque... 阅读详情

(1)batchsize:批大小,也就是在一次模型迭代/训练过程中所使用的样本数目

(2)iteration:1个iteration等于使用batchsize个样本训练一次;这里相当于 总样本/batchsize  迭代一遍需要迭代多少轮。

(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;也就是训练整个数据集的重复数。

举个例子,训练集有1000个样本,batchsize=10,那么:训练完整个样本集需要:100次iteration,1次epoch。
 

1. 学习率的设置

我们知道在参数的学习主要是通过反向传播和梯度下降,而其中梯度下降的学习率设置方法是指数衰减。 
通过指数衰减的学习率既可以让模型在训练的前期快速接近较优解,又可以保证模型在训练后期不会有太大的波动,从而更加接近局部的最优解。 
在tensorflow中提供了一个灵活的学习率设置方法,tf.train.exponential_decay函数实现了指数衰减,其实现的原理如下:

decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)

其中: 
decayed_learning_rate:每一轮优化时使用的学习率 (当前学习率)
learning_rate:事先设定的初始学习率 
decay_rate:衰减系数  (学习率的衰减系数)
decay_steps:衰减速度 (相当于iteration ,总样本/batch-size)

tf.train.exponential_decay函数还可以通过设置参数staircase 选择不同的衰减方式。

staircase默认值是false,这时的学习率会随迭代的轮数成平滑的衰减下降,这里的不同训练数据有不同的学习率。
staircase默认值是true,(global_step/decay_steps)会被转化为整数,这时的学习率会随着轮数成阶梯状的下降,在这种设置下,decay_steps指完整的使用一遍训练数据所需要的迭代轮数(总的训练样本数处以每一个batch中的训练样本数),这里的意思就是每完整的过完一遍训练数据,学习率就减少一次,这可以使得训练集中的所有数据对模型训练有相等的作用。
如下图: 

这里写图片描述

tensorflow使用如下:
LEARNING_RATE = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True)

train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y, global_step=global_step)

示例:

import tensorflow as tf
from numpy.random import RandomState

# 假设我们要最小化函数  y=x^2 , 选择初始点  x0=5 
TRAINING_STEPS = 100
LEARNING_RATE = 1
x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)

train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y)

global_step = tf.Variable(0)
LEARNING_RATE = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True)

x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)
train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(y, global_step=global_step)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(TRAINING_STEPS):
        sess.run(train_op)
        if i % 10 == 0:
            LEARNING_RATE_value = sess.run(LEARNING_RATE)
            x_value = sess.run(x)
            print ("After %s iteration(s): x%s is %f, learning rate is %f." \
                   % (i+1, i+1, x_value, LEARNING_RATE_value))

运行结果:

这里写图片描述

After 1 iteration(s): x1 is 4.000000, learning rate is 0.096000.
After 11 iteration(s): x11 is 0.690561, learning rate is 0.063824.
After 21 iteration(s): x21 is 0.222583, learning rate is 0.042432.
After 31 iteration(s): x31 is 0.106405, learning rate is 0.028210.
After 41 iteration(s): x41 is 0.065548, learning rate is 0.018755.
After 51 iteration(s): x51 is 0.047625, learning rate is 0.012469.
After 61 iteration(s): x61 is 0.038558, learning rate is 0.008290.
After 71 iteration(s): x71 is 0.033523, learning rate is 0.005511.
After 81 iteration(s): x81 is 0.030553, learning rate is 0.003664.
After 91 iteration(s): x91 is 0.028727, learning rate is 0.002436.

2. 过拟合

通常解决过拟合的方法是正则化,正则化就是在损失函数中加入刻画模型复杂程度的指标。 
具体就是:如果损失函数是J(θ)
,那么在优化时不直接优化J(θ)
,而是优化J(θ)+λR(w)
,其中R(w)
就是刻画模型的复杂度,而λ
就是表示模型复杂损失在总损失中的比例。常用来刻画模型复杂度的函数R(w)
有2种: 
L1正则化:R(w)=||w||1=∑i|wi|
 
L2正则化:R(w)=||wi||22=∑i|w2i|
 
这两种正则化的区别在于L1正则化会让参数变得稀疏(指更多的参数变为0,有点特征提取的意思),而L2正则化则不会,因为它会让系数变得非常小,但不至于变为0。但是在优化时需要对损失函数求偏导,所以常用的是L2正则化。 
这里还可以同时用两种正则化:R(w)=∑ia|wi|+(1−a)w2i
 
tensorflow中提供了tf.contrib.layers.l2_regularizer(lambda1)(var)函数,它可以返回一个函数,这个函数可以计算一个给定参数的L2正则化项的值。 
例如:

weights=tf.constant([[1.0,2.0],[-3.0,4.0]])
with tf.Session() as sess:
    # 输出:(|1|+|-2|+|-3|+|4|)x0.5=5
    print sess.run(tf.contrib.layers.l1_regularizer(0.5)(wights))

当网络复杂时,这种方法就不行了,这时可以通过使用tensorflow中提供的集合(在一个计算图中保存一组实体)来解决。

示例:

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

# 生成模拟数据集
data = []
label = []
np.random.seed(0)

# 以原点为圆心,半径为1的圆把散点划分成红蓝两部分,并加入随机噪音。
for i in range(150):
    x1 = np.random.uniform(-1,1)
    x2 = np.random.uniform(0,2)
    if x1**2 + x2**2 <= 1:
        data.append([np.random.normal(x1, 0.1),np.random.normal(x2,0.1)])
        label.append(0)
    else:
        data.append([np.random.normal(x1, 0.1), np.random.normal(x2, 0.1)])
        label.append(1)

data = np.hstack(data).reshape(-1,2)
label = np.hstack(label).reshape(-1, 1)
plt.scatter(data[:,0], data[:,1], c=np.squeeze(label),
           cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
plt.show()

# 定义一个获取权重,并自动加入正则项到损失的函数
def get_weight(shape, lambda1):
    var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)
    # 下面的函数把新生成变量的L2正则化损失加入集合:第一个参数是集合的名字,第二个参数是要加入的集合
    tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lambda1)(var))
    print('var:',var)
    return var

####### 定义神经网络#############

# 输入数据是二维特征
x = tf.placeholder(tf.float32, shape=(None, 2)) 
y_ = tf.placeholder(tf.float32, shape=(None, 1))
sample_size = len(data)

# 每层节点的个数,这里是5层的神经网络
layer_dimension = [2,10,5,3,1] 
n_layers = len(layer_dimension)
# 该变量维护前向传播时最深层的节点,开始的时候就是输入层
cur_layer = x
in_dimension = layer_dimension[0]

# 循环生成5层的网络结构,这里主要是为了构造前向传播的过程
for i in range(1, n_layers):
    out_dimension = layer_dimension[i]
    # 生成当前层的权重,并同时把权重的L2正则化损失加入计算图的集合
    weight = get_weight([in_dimension, out_dimension], 0.003)
    bias = tf.Variable(tf.constant(0.1, shape=[out_dimension]))
    # 这里使用relu激活函数
    cur_layer = tf.nn.relu(tf.matmul(cur_layer, weight) + bias)
    # 更新需要运算的层
    in_dimension = layer_dimension[i]

# 最后输出的样本预测值
y= cur_layer
# 损失函数的定义,这里只是模型在训练数据上变现的损失函数,因为L2的正则化已经加入了损失集合
mse_loss = tf.reduce_sum(tf.pow(y_ - y, 2)) / sample_size
# 将均方误差损失函数加入损失集合
tf.add_to_collection('losses', mse_loss)
# tf.get_collection('losses')返回集合losses中的元素,
# 得到的是一个列表,在这里就是损失函数的不同部分,加起来就是总的损失
loss = tf.add_n(tf.get_collection('losses'))
# 定义训练的目标函数loss,训练次数及训练模型
train_op = tf.train.AdamOptimizer(0.001).minimize(loss)
TRAINING_STEPS = 40000


# 开启会话,进行计算
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    for i in range(TRAINING_STEPS):
        sess.run(train_op, feed_dict={x: data, y_: label})
        if i % 2000 == 0:
            print("After %d steps, loss: %f" % (i, sess.run(loss, feed_dict={x: data, y_: label})))

    # 画出训练后的分割曲线       
    xx, yy = np.mgrid[-1:1:.01, 0:2:.01]
    grid = np.c_[xx.ravel(), yy.ravel()]
    probs = sess.run(y, feed_dict={x:grid})
    probs = probs.reshape(xx.shape)

plt.scatter(data[:,0], data[:,1], c=np.squeeze(label),
           cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")
plt.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.1)
plt.show()

运行结果:

After 0 steps, loss: 1.503084
After 2000 steps, loss: 0.136486
After 4000 steps, loss: 0.077162
After 6000 steps, loss: 0.060446
After 8000 steps, loss: 0.057898
After 10000 steps, loss: 0.057211
After 12000 steps, loss: 0.057091
After 14000 steps, loss: 0.057002
After 16000 steps, loss: 0.056941
After 18000 steps, loss: 0.056830
After 20000 steps, loss: 0.056788
After 22000 steps, loss: 0.056766
After 24000 steps, loss: 0.056751
After 26000 steps, loss: 0.056741
After 28000 steps, loss: 0.056727
After 30000 steps, loss: 0.056714
After 32000 steps, loss: 0.056713
After 34000 steps, loss: 0.056713
After 36000 steps, loss: 0.056713
After 38000 steps, loss: 0.056714
 


这里会有一个报错: 
ValueError: c of shape (150, 1) not acceptable as a color sequence for x with size 150, y with size 150 
这里需要把:plt.scatter(data[:,0], data[:,1], c=label, 
cmap="RdBu", vmin=-.2, vmax=1.2, edgecolor="white")中的c=label改成c=np.squeeze(label)。

这里还有一个没太搞得太明白,就是神经网络是怎么画出分界线的,以后有时间再搞吧。。。

3. 滑动平均m模型

滑动平均模型可以使模型在测试集上更加健壮。 
tensorflow中提供了 tf.train.ExponentialMovingAverage()来实现滑动平均模型,初始化时需要提供一个衰减率,以用于模型更新的速度。ExponentialMovingAverage对每个变量会维护一个影子变量,这个影子变量的初始值就是相应变量的初始值,而每次运行时变量的值会更新为: 
shadow_variable=decay×shadow_variable+(1−decay)×variable
 
其中: 
shadow_variable:影子变量 
variable:待更新变量 
decay:衰减率(决定模型更新的速度) 
ExponentialMovingAverage还提供了num_updates参数来动态设置decay: 

min{decay,1+num_updates10+num_updates}
 

下面简单一个例子说明更新过程:
import tensorflow as tf

# 定义一个变量用于计算滑动平均,初始值设为0,并且类型必须为实数型
v1 = tf.Variable(0, dtype=tf.float32)
# 这里的step变量模拟神经网络中迭代的轮数,用于动态控制衰减率
step = tf.Variable(0, trainable=False)
# 定义一个滑动平均类,初始衰减率为0.99
ema = tf.train.ExponentialMovingAverage(0.99, step)
# 定义一个更新变量滑动平均的操作,这里给定一个列表
maintain_averages_op = ema.apply([v1]) 

with tf.Session() as sess:

    # 初始化所有的变量
    init_op = tf.global_variables_initializer()
    sess.run(init_op)

    # ema.average(v1)获得滑动平均之后变量的取值。初始化之后变量v1的值和v1的滑动平均都为0
    print(sess.run([v1, ema.average(v1)]))

    # 更新变量v1的取值
    sess.run(tf.assign(v1, 5))
    # 更新v1的滑动平均值,这时的衰减率为min{0.99,(1+step)/(10+step)=0.1}=0.1
    # 所以此时v1的滑动平均值更新为0.1x0+0.9x5=4.5
    sess.run(maintain_averages_op)
    print(sess.run([v1, ema.average(v1)]))

    # 更新step和v1的取值
    sess.run(tf.assign(step, 10000))  
    sess.run(tf.assign(v1, 10))
    # 更新v1的滑动平均值,这时的衰减率为min{0.99,(1+step)/(10+step)=0.999}=0.99
    # 所以此时v1的滑动平均值更新为0.99x4.5+0.01x10=4.555
    sess.run(maintain_averages_op)
    print(sess.run([v1, ema.average(v1)]))     

    # 更新一次v1的滑动平均值
    sess.run(maintain_averages_op)
    print (sess.run([v1, ema.average(v1)]))     

结果:

[0.0, 0.0]
[5.0, 4.5]
[10.0, 4.555]
[10.0, 4.60945]

神经网络 Python TensorFlow 设置学习率(学习笔记) #学习率设为1 import tensorflow as tf training_steps=10 learning_rate=1 x=tf.Variable(tf.constant(5,dtype=tf.float32),name='x') y=tf.square(x) train_op=tf.train.GradientDescentOptimizer(learning_rate).m... 阅读详情

相关推荐

视觉特征-自监督-掩码特征预测【2024-04】:V-JEPA【潜空间】【≈90%多块时空掩码】【上下文目标块预测】【特征空间预测≠像素重建】【EMA目标编码器+停梯度】

Adrien Bardes 1,2,3, Quentin Garrido 1,4, Jean Ponce 3,5,6, Xinlei Chen 1, Michael Rabbat 1, Yann LeCun 1,5,6, Mahmoud Assran 1,†, Nicolas Ballas 1,† 1 FAIR at Meta, 2 Inria, 3 École normale supérieure, CNRS, PSL Research University, 4 Univ. Gustave Eiffel

u013250861的博客 245

学习率衰减方法

分段常数衰减 分段常数衰减是在事先定义好的训练次数区间上,设置不同的学习率常数。刚开始学习率大一些,之后越来越小,区间的设置需要根据样本量调整,一般样本量越大区间间隔应该越小。 tf中定义了tf.train.piecewise_constant 函数,实现了学习率的分段常数衰减功能。 tf.train.piecewise_constant( x, boundaries, ...

devil_son1234的博客 2314

学习率衰减Learning Rate Decay原理与代码实例讲解

学习率衰减Learning Rate Decay原理与代码实例讲解 1.背景介绍 在机器学习和深度学习的训练过程中,学习率(Learning Rate)是一个至关重要的超参数。它决定了模型在每次迭代时更新权重的步长。如果学习率过大,模型可能会在最优解附近震荡

AI天才研究院 763

深度学习——学习率衰减(learning rate decay)

学习率衰减(learning rate decay) 为了防止学习率过大,在收敛到全局最优点的时候会来回摆荡,所以要让学习率随着训练轮数不断按指数级下降,收敛梯度下降的学习步长。 学习率衰减可以用以下代码实现 decayed_learning_rate = learning_rate * np.power(decay_rate,(global_step / decay_steps)) de...

TianHongZXY的博客 4万+

告别Godot默认编辑器:手把手教你用VSCode配置C#开发环境(附中文注释避坑指南)

本文详细介绍了如何将VSCode配置为Godot引擎的C#开发环境,提升游戏开发效率。从环境准备、扩展配置到解决中文编码问题,提供完整的避坑指南和高级调试技巧,帮助开发者充分利用VSCode的智能补全和调试功能,打造高效工作流。

weixin_30596023的博客 188

c#.net使用正则表达式验证文本中是否包含手机号码或电话号码?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; namespace RegularPhoneApp { class Program

码农 3584

神经网络:Epoch、Batch Size和迭代

Epoch、Batch Size和迭代 深度学习模型离不开这3个术语,下面我们来了解下它们的区别 和联系? 背景知识: 梯度下降 分三点:1.直观理解 2. 梯度下降怎么做(附带推荐编程实践) 3. 梯度下降有啥用 1、直观理解梯度下降: 其实它没啥就是让计算机不断猜最小值的那个点自变量x在哪,猜大了让它小一点,猜小了让它大一点。 主要三点: 1.梯度下降:两个意思,1.根据梯度(导数)的符号来判断最小值点x在哪;让函数值下降(变小) 2.梯度就是导数(对于多维就是偏导数) 3.梯度下降作用是找到函数的最小

paddle video_tag模型踩坑 4756

浙政钉(专有钉钉)门户免登(超详细)

钉钉家族 介绍浙政钉门户免登之前,首先搞清楚几个软件的关系,软件分别是:钉钉,专有钉钉,浙政钉 钉钉 是阿里巴巴集团专为中小企业打造的沟通和协同的多端平台。 专有钉钉 原名 政务钉钉,有更开放的设计能力、集成能力、更结构化协同产品、更定制化开发平台。支持专有化部署,数据落本地,更安全、客户可对该产品持牌运营、结构化编排,协助构建本地应用中心、提供移动应用全面安全保障体系。 浙政钉 为规范浙政钉整体架构体系,按照统分结合原则,由省政府办公厅统一设计整体工作界面和系统框架,统筹指导全省统建应用建设,各单

一缕南风的博客 2万+

对于tensorflow学习率的理解:global_step;decay_steps

tf.train.exponential_decay( learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None ) # 学习率迭代公式: decayed_learning_rate = learning_rate * ...

Hero_Never_GIVE_UP的博客 5867

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

被滑块虐了3个月!我终于写出了零失败的Python滑块验证码通杀方案(AI识别+真人轨迹)

缺口识别的偏移量一定要算对:滑块的初始位置一般在图片左侧,宽度约50像素,一定要减去这个初始宽度,不然会滑多了;绝对不要用Selenium的drag_and_drop方法:这个方法是匀速滑动,直接被风控秒识别,必须自己分步控制鼠标移动;滑动前后必须加停顿:真人按住滑块会停0.1-0.3秒再开始滑,松开之前也会停0.05-0.1秒,不要按下去立刻就滑,滑完立刻就松;不要每次都滑的完美无缺:可以设置10%的概率故意滑错一次,然后刷新验证码重新滑,更像真人;无头模式通过率极低。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 500

深度学习中常用的学习率衰减策略及tensorflow实现

目录 引言 (1)分段常数衰减 (2)指数衰减 (3)自然指数衰减 (4)多项式衰减 (5)余弦衰减 (6)线性余弦衰减 (7)噪声线性余弦衰减 (8)倒数衰减 计算公式: tensorflow中的函数介绍: 使用示例: 学习率变化曲线示意图: 引言 学习率(learning rate,lr)是在神经网络的训练过程中一个很重要的超参数,对神经网络的训练效果与训练时间成本有很大影响。 学习率对训练效果的影响(主要体现在对网络的有效容量/参数搜索空间的影响上): 学...

wzg2016的博客 5585

几款开源的自动驾驶仿真平台项目

它被开发为一个虚幻的插件,可以简单地放到任何你想要的虚幻环境中。第一类是基于合成的数据,对环境、感知及车辆进行模拟,这里的感知大多数是图像层面的感知,这类模拟器主要用于感知、规划算法的初步开发上,Carla、AirSim、Udacity self-driving car simulator就属于这类;第二类是基于真实数据的回放,这里的真实数据包括图像、lidar、radar等各种传感器的数据,这类模拟器主要用于测试无人驾驶中信息融合算法以及车辆不同部件的性能,Apollo和Autoware就属于这类。

南七小僧的学海无涯 2849

深度学习中学习率的指数衰减

为什么要使用指数衰减法 在神经网络的参数更新过程中,学习率不能太大也不能太小,太大可能会导致参数在最优值两侧来回移动,太小会大大降低优化速度,为了解决学习率的问题,TensorFlow 提供了一种灵活的学习率设置方法,即指数衰减法。 函数及参数 对应的命令为 tf.train.exponential_decay,通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续...

会飞的猪的博客 4847

RK3568驱动 SPI主/从 配置

RK3568 SPI 配置指南 内核配置:启用用户空间驱动(主)和从模式协议支持。 主模式:设备树设置status="okay"、max-freq及引脚复用,子节点compatible="rockchip,spidev"。 从模式:需添加spi-slave属性,子节点命名以slave@X开头。 编译烧写:修改设备树后编译内核或全量镜像,验证/dev/spidevX.Y节点。 测试:使用spidev_test工具,主模式可环回测试,从模式需与主设备通信。 (关键:从模式强制spi-slave和命名规则,频率匹

文石_2009的博客 1143

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

【万物皆可 GAN】给马儿换皮肤

【万物皆可 GAN】给马儿换皮肤.

我是小白呀的博客 3682

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

tensorflow和pytorch指数衰减学习率

参数:公式: decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps) 公式: lr = lr * gamma**epoch可以看到两者实现有不同,但pytorch实现tensorflow的模式可以利用gamma^decay_steps进行转换

菜狍的博客 523

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

模型调参(二):learning rate decay(学习率衰减)【使用库调整学习率:等间隔、多间隔、指数衰减、余弦退火函数、根据指标、自定义】【手动调整学习率】

一、学习率衰减的概念和必要性 解释①:如果在整个梯度下降过程中,保持learning rate不变,如果learning rate设置小了,会导致梯度下降过慢,如果设置大了,对于mini-batch来说最后就很难收敛,一直在最小值附近盘旋。所以动态改变learning rate很重要,在开始的时候,设置较大的learning rate,可以保证梯度下降的速度,慢慢减小,可以使最后的cost function在最小值非常小的范围内盘旋,得到一个比较满意的值。 解释②:学习率过大,在算法优化的前期会加速学习,使

u013250861的博客 7880

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习概念、参数理解:iteration, batch_size, epoch, learning rate, weight_decay

  关于iteration, batch_size, epoch:   神经网络在训练数据集上跑一遍,称为一次迭代(iteration)   但是一次迭代如果把数据集中的数据都跑一遍,速度会很慢,所以一次iteration只使用部分数据,这个数目就称为batch_size   不过这样的话,一次迭代就不一定能完整的跑完数据集中的所有数据了,这时候如果比较iteration就没啥意义了,所以又...

一颗修行千年的葱 3431

深度学习-学习率调整策略

在深度学习中,学习率调整策略(Learning Rate Scheduling)用于在训练过程中动态调整学习率,以实现更快的收敛和更好的模型性能。选择合适的学习率策略可以避免模型陷入局部最优、震荡不稳定等问题。

lqq 1846

软件工程应用与实践(六):Paddle OCR文字识别器策略四

2021SC@SDUSC 目录 一、前情回顾 1.PP-OCR文字识别策略 2.本文策略——学习率衰减的简单介绍 学习率衰减介绍 学习率衰减的常见参数 几种固定学习率衰减策略介绍 学习率衰减的warm-up策略 Paddle OCR所涉及的学习率衰减策略 二、学习率衰减策略与代码分析 1.PP-OCR的学习率衰减策略 2.代码分析 总结 一、前情回顾 1.PP-OCR文字识别策略 策略的选用主要是用来增强模型能力和减少模型大小。下面是PP-OCR...

pinkray_c的博客 1029

Tensorflow中的指数学习率,指数滑动平均,global_step,num_updates,staircase参数等

TensorFlow笔记:指数衰减学习率 学习率决定了参数更新的幅度。通常我们希望在学习开始阶段提供一个较大的学习率,使得参数快速更新,达到最优解附近。然后随着训练的进行,我们希望在学习率随着训练次数的增加而减少,即在接近最优解的时候能够以较小的学习率逼近最优解 TensorFlow为我们提供了tf.train.exponential_decay()函数实现这个功能 tf.train.expo...

edward_zcl的博客 863

Python函数:学习率衰减 tf.train.exponential_decay()

生动形象地介绍了学习率衰减函数: tf.train.exponential_decay()

huozhiran的博客 2111

浅谈退化学习率(一)

学习率对于每一个深度学习研究者和开发者来说是一个老生常谈的问题了,在设置学习率大小的时候我们经常会纠结精度和速度之间到底选择哪个,试图找到一种两者之间的平衡。 基于此问题,我们便引入了退化学习率。 通俗来讲,退化学习率就是训练过程中使学习率逐渐减小,当训练开始时我们使用大学习率加快训练速度,在一定程度后我们减小学习率来提高模型的精确度。 定义退化学习率的方法: def exponential_decay(learning_rate, global_step, decay_step, decay_rate,

ross_mystery的博客 689

【深度学习】(10) 自定义学习率衰减策略(指数、分段、余弦),附TensorFlow完整代码

大家好,今天和大家分享一下如何使用 TensorFlow 自定义 指数学习率下降、阶梯学习率下降、余弦学习率下降 方法,并使用 Mnist数据集验证自定义的学习率下降策略。 创建的自定义学习率类方法,需要继承 tf.keras.optimizers.schedules.LearningRateSchedule 1. 指数学习率下降 指数学习率下降公式为: 其中代表初始的学习率,代表学习率衰减系数,代表epoch,即每次迭代学习率衰减一次 以初始学习率,学习率衰减系数,为例指数学...

博观而约取,厚积而薄发 7208
上一篇: tensorflow reduction_indices理解
下一篇: 各种学习率衰减方法
hellocsz
博客等级 码龄9年 608粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值