Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在LSTM中有效地使用批处理规范化?

如何在LSTM中有效地使用批处理规范化?
EN

Stack Overflow用户
提问于 2018-01-31 14:49:03
回答 2查看 6.3K关注 0票数 3

在我的数据集中,目标/输出变量是Sales列,数据集中的每一行都记录一年(2008-2017)中每一天的Sales。数据集如下所示:

我的目标是基于这样的数据集建立一个LSTM模型,该模型应该能够在训练结束时提供预测。我在2008-2016年的数据上训练这个模型,并使用2017年数据的一半作为验证,其余的作为测试集。

以前,我尝试使用dropout和提前停止来创建模型。如下所示:

代码语言:javascript
运行
AI代码解释
复制
mdl1 <- keras_model_sequential()
mdl1 %>%
  layer_lstm(units = 512, input_shape = c(1, 3), return_sequences = T ) %>%  
  layer_dropout(rate = 0.3) %>%
  layer_lstm(units = 512, return_sequences = FALSE) %>%
  layer_dropout(rate = 0.2) %>%
  layer_dense(units = 1, activation = "linear")

mdl1 %>% compile(loss = 'mse', optimizer = 'rmsprop')

该模型如下所示

代码语言:javascript
运行
AI代码解释
复制
___________________________________________________________
Layer (type)               Output Shape         Param #    
===========================================================
lstm_25 (LSTM)             (None, 1, 512)       1056768    
___________________________________________________________
dropout_25 (Dropout)       (None, 1, 512)       0          
___________________________________________________________
lstm_26 (LSTM)             (None, 512)          2099200    
___________________________________________________________
dropout_26 (Dropout)       (None, 512)          0          
___________________________________________________________
dense_13 (Dense)           (None, 1)            513        
===========================================================
Total params: 3,156,481
Trainable params: 3,156,481
Non-trainable params: 0
___________________________________________________________

为了训练模型,提前停止与验证集一起使用。

代码语言:javascript
运行
AI代码解释
复制
mdl1.history <- mdl1 %>% 
  fit(dt.tr, dt.tr.out, epochs=500, shuffle=F,
      validation_data = list(dt.val, dt.val.out),
      callbacks = list(
        callback_early_stopping(min_delta = 0.000001,  patience = 10, verbose = 1)
      ))

最重要的是,我希望使用批处理标准化来加快训练速度。根据我的理解,要使用批处理标准化,我需要将数据分成批处理,并将layer_batch_normalization应用于每个隐藏层的输入。模型层如下所示:

代码语言:javascript
运行
AI代码解释
复制
batch_size <- 32
mdl2 <- keras_model_sequential()
mdl2 %>%
  layer_batch_normalization(input_shape = c(1, 3), batch_size = batch_size) %>%

  layer_lstm(units = 512, return_sequences = T) %>%
  layer_dropout(rate = 0.3) %>%
  layer_batch_normalization(batch_size = batch_size) %>%

  layer_lstm(units = 512, return_sequences = F) %>%
  layer_dropout(rate = 0.2) %>%
  layer_batch_normalization(batch_size = batch_size) %>%

  layer_dense(units = 1, activation = "linear")

mdl2 %>% compile(loss = 'mse', optimizer = 'rmsprop')

此模型如下所示:

代码语言:javascript
运行
AI代码解释
复制
______________________________________________________________________________
Layer (type)                                    Output Shape       Param #    
==============================================================================
batch_normalization_34 (BatchNormalization)     (32, 1, 3)         12         
______________________________________________________________________________
lstm_27 (LSTM)                                  (32, 1, 512)       1056768    
______________________________________________________________________________
dropout_27 (Dropout)                            (32, 1, 512)       0          
______________________________________________________________________________
batch_normalization_35 (BatchNormalization)     (32, 1, 512)       2048       
______________________________________________________________________________
lstm_28 (LSTM)                                  (32, 1, 512)       2099200    
______________________________________________________________________________
dropout_28 (Dropout)                            (32, 1, 512)       0          
______________________________________________________________________________
batch_normalization_36 (BatchNormalization)     (32, 1, 512)       2048       
______________________________________________________________________________
dense_14 (Dense)                                (32, 1, 1)         513        
==============================================================================
Total params: 3,160,589
Trainable params: 3,158,535
Non-trainable params: 2,054
______________________________________________________________________________

训练模型看起来像以前一样。唯一的区别在于训练和验证数据集,其大小是batch_size的倍数(这里是32),通过从倒数第二批到最后一批的数据重新采样。

然而,mdl1的性能比mdl2要好得多,如下所示。

我不确定我到底做错了什么,因为我是从keras (以及一般的实用神经网络)开始的。此外,第一个模型的性能也不是很好;任何关于如何改进的建议也是很好的。

EN

回答 2

Stack Overflow用户

发布于 2019-08-07 00:55:30

LSTM中的批量规范化并不是那么容易实现的。一些论文展示了一些令人惊叹的结果,https://arxiv.org/pdf/1603.09025.pdf称之为递归批处理标准化。作者遵循以下公式进行应用

BATCH-NORMALIZED LSTM

不幸的是,这个模型还没有在keras中实现,只在tensorflow https://github.com/OlavHN/bnlstm中实现。

然而,在激活函数没有居中和移位后,我能够使用(默认)批处理归一化获得良好的结果。这种方法不同于上面在c_t和h_t之后应用BN的方法,也许值得一试。

代码语言:javascript
运行
AI代码解释
复制
model = Sequential()
model.add(LSTM(neurons1,
               activation=tf.nn.relu,
               return_sequences=True,
               input_shape=(timesteps, data_dim)))
model.add(BatchNormalization(momentum=m, scale=False, center=False))
model.add(LSTM(neurons2,
               activation=tf.nn.relu))
model.add(BatchNormalization(momentum=m, scale=False, center=False))
model.add(Dense(1))
票数 3
EN

Stack Overflow用户

发布于 2018-01-31 17:50:43

我在Python中使用Keras,但我可以尝试R。在fit方法中,文档中说,如果省略,则默认为32。这在当前版本中不再正确,因为它可以在source code中看到。我认为你应该这样尝试,至少在Python中是这样的:

代码语言:javascript
运行
AI代码解释
复制
mdl2 <- keras_model_sequential()
mdl2 %>%
  layer_input(input_shape = c(1, 3))  %>%

  layer_batch_normalization() %>%
  layer_lstm(units = 512, return_sequences = T, dropout=0.3) %>%

  layer_batch_normalization() %>%
  layer_lstm(units = 512, return_sequences = F, dropout=0.2) %>%

  layer_batch_normalization() %>%
  layer_dense(units = 1, activation = "linear")

mdl2 %>% compile(loss = 'mse', optimizer = 'rmsprop')
mdl2.history <- mdl2 %>% 
  fit(dt.tr, dt.tr.out, epochs=500, shuffle=F,
      validation_data = list(dt.val, dt.val.out),
      batch_size=32,
      callbacks = list(
        callback_early_stopping(min_delta = 0.000001,  patience = 10, verbose = 1)
      ))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48544953

复制
相关文章
android系统如何自适应屏幕大小
1、屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别(small,normal,large,and extra large)。 1.3屏幕密度 每英寸像素数 手机可以有相同的分辨率,但屏幕尺寸可以不相同, Diagonal pixel表示对角线的像素值(=),DPI=933/3.7=252 android将实际的屏幕密度分为四个通用尺寸(low,medium,high,and extra high) 一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi 对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚 1.4密度无关的像素(Density-independent pixel——dip) dip是一种虚拟的像素单位 dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160) 当你定义应用的布局的UI时应该使用dp单位,确保UI在不同的屏幕上正确显示。 手机屏幕分类和像素密度的对应关系如表1所示 手机尺寸分布情况(http://developer.android.com/resources/dashboard/screens.html)如图所示, 目前主要是以分辨率为800*480和854*480的手机用户居多 从以上的屏幕尺寸分布情况上看,其实手机只要考虑3-4.5寸之间密度为1和1.5的手机 2、android多屏幕支持机制 Android的支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。 Android平台中支持一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合适资源。 指定大小(size-specific)的合适资源是指small, normal, large, and xlarge。 指定密度(density-specific)的合适资源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high). Android有个自动匹配机制去选择对应的布局和图片资源 1)界面布局方面    根据物理尺寸的大小准备5套布局:     layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),     layout-small(屏幕尺寸小于3英寸左右的布局),       layout-normal(屏幕尺寸小于4.5英寸左右),     layout-large(4英寸-7英寸之间),     layout-xlarge(7-10英寸之间) 2)图片资源方面   需要根据dpi值准备5套图片资源:     drawable:主要放置xml配置文件或者对分辨率要求较低的图片     drawalbe-ldpi:低分辨率的图片,如QVGA (240x320)     drawable-mdpi:中等分辨率的图片,如HVGA (320x480)     drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854)     drawable-xhdpi:至少960dp x 720dp Android有个自动匹配机制去选择对应的布局和图片资源。   系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。   在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。 3、AndroidManifest.xml 配置 android从1.6和更高,Google为了方便开发者对于各种分辨率机型的移植而增加了自动适配的功能           <supports-screens            android:largeScreens="true"               android:normalScreens="true"              android:smallScreens="true"               android:anyDensity="true"/> 3.1是否支持多种不同密度的屏幕 android:anyDensity=["true" | "false"]  如果android:anyDensity
用户2192970
2019/02/21
5.3K1
css页面自适应屏幕大小_html图片自适应屏幕
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170364.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
8.1K0
css页面自适应屏幕大小_html图片自适应屏幕
Word VBA技术:快速调整表格大小以适应页面宽度
有时候,文档中的表格有大有小且并不一定与页面同宽,或者页面宽度调整之后,表格仍保持原样。如果我们想将表格的大小调整为与页面宽度相同,并且保持各列单元格中原有的相对列宽,那么可以使用VBA来解决。
fanjy
2023/02/24
2K0
图片自适应父元素大小,并左右上下居中的css方法
图片自适应父元素大小,并左右上下居中的css方法 前言 这种效果多见于矩形盒子里面调用不规则的图片,希望能够达到的效果。这个效果可以很简单的用css来实现,虽然已经烂熟于心,但是并未记录下来。今天看到
FungLeo
2018/01/08
3.2K0
图片自适应父元素大小,并左右上下居中的css方法
css适配屏幕尺寸大小自适应
改新模板的时候考虑到单独适配手机端排版美化。只需要在css内写好窗口大小相对应的样式。访问就根据窗口大小自动使用相应的样式。
AlexTao
2020/02/13
6.2K0
[1057]VMware安装的虚拟机窗口如何自适应屏幕大小
vmware是一款非常好用的虚拟机,大部分用户都会用vmware安装各种操作系统,安装后可能会出现一个问题,就是主机屏幕太小,无法完整显示VMware虚拟机界面,这时候就可以设置让VMware自动适应主机窗口,一起来了解下。
周小董
2021/10/28
16.3K0
[1057]VMware安装的虚拟机窗口如何自适应屏幕大小
flex vue 垂直居中居上_flex 垂直居中、两列对齐、自适应宽[通俗易懂]
hahjdjjajdES6提供的Proxy可以让JS开发者很方便的使用代理模式,听说Vue
全栈程序员站长
2022/08/23
1.1K0
CSDN Markdown编辑器改变图片对齐方式(居中,左对齐,右对齐)及改变图片大小
我也是由于想博客更美观要使图片居中,查阅百度后,结合自己走的弯路,在此给大家提供借鉴。 使用CSDN中Markdown编辑器的帮助文档的方法插入图片Ctrl/Command + Shift + G,上传图片不要使用搜狗输入法,按键功能有冲突,上传完后如图
小火柴棒
2019/01/11
4.1K0
【前端】CSS : 对齐、居中
文本、元素的对齐和居中在开发中经常会用到。本文分别对文本、元素的对齐、居中进行介绍
Gavin-ZYX
2019/03/04
3.3K0
【前端】CSS : 对齐、居中
tkinter: 屏幕居中
目的 实现 tkinter 窗口 居于 屏幕 正中央 。 效果图 实现代码 根据 python tkinter 窗口居中对齐 修改得到: # coding=utf-8 import tkinter a
JNingWei
2018/09/28
9290
tkinter: 屏幕居中
居中对齐的几种方法
这是因为,根据规范,父元素的子元素的上边距( margin-top),如果碰不到有效的 border或者 padding,就会一层一层的找自己的祖先元素,直到找到祖先元素有有效的 border或border为止
赤蓝紫
2023/01/18
8660
人工智能系统可以调整图像的对比度、大小和形状
人工智能(AI)和艺术并没有你想象的那么对立。事实上,智能系统已经在与艺术家合作,帮助艺术家创作歌曲,制作油画作品,以及制作彩色标识。现在,一名软件开发人员利用人工智能的生成能力来操纵图像中的对比度、颜色和其他属性。
AiTechYun
2018/12/29
1.8K0
人工智能系统可以调整图像的对比度、大小和形状
Visio如何调整锁定图像大小
在Visio中,比如模板中的UML类图,是不可调整大小的,这可能给我们设计图片带来了一些不便之处,如下图: 可以看到其边框是显示锁定状态无法修改的,当我们在左下角修改器长宽时,也会出现不可修改的情况。
码农阿宇
2018/04/18
4.6K0
Visio如何调整锁定图像大小
html背景图片自适应屏幕大小_jsp背景图片自适应
background-size:cover 会把图片拉伸至足够大,但是背景图片有些部分可能显示不全
全栈程序员站长
2022/11/08
4.3K0
html背景图片自适应屏幕大小_jsp背景图片自适应
Ubuntu 16.04虚拟机调整窗口大小自适应Windows 7
Windows 7上Ubuntu 16.04虚拟机安装成功后,默认的虚拟机窗口比较小,需要适当调整,才能把虚拟机的屏幕放大, 适合使用,以下介绍调整方法。
用户8704835
2021/06/07
1.9K0
人脸对齐:ASM (主动形状模型)算法
本文介绍了人脸对齐领域的一种算法——主动形状模型(ASM),它是一种基于点分布模型(PDM)的算法,通过全局和局部的形状约束条件,利用最小二乘法拟合出人脸形状,同时介绍了ASM的流程和具体实现细节。
郑克松
2017/08/24
6.1K0
人脸对齐:ASM (主动形状模型)算法
html图片自适应div大小_未知宽高的div元素垂直水平居中
2.设置html图片的高度 计算出来的 height 正好是排版后的高度大小,是 CGFloat 类型,在是在我们设置UIlabel/Cell 高度时,可能存在四舍五入等,最后存在的一点点误差使得 UILabel 显示不全,可能出现缺少一行,上下空白太多等情况;
全栈程序员站长
2022/11/09
2.9K0
bootstrap table表格内容居中对齐
官方网站: http://bootstrap-table.wenzhixin.net.cn/ 参考文档:http://issues.wenzhixin.net.cn/bootstrap-table/index.html 中文文档:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 下载bootstrap Table插件所必须的js,地址:https://github.com/wenzhixin/bootstrap-table
王小婷
2019/07/24
4.6K0
居中对齐两个难点的实现
注:vertical-align 作用单元格时,才生效,所以一般会结合dispaly: table-cell ; 一起使用才有效果
用户9914333
2022/07/22
5990
css 文字自适应大小_div自适应窗口大小
css3提供了一些与当前viewpoint相关的元素,vw,vh,vmin, vmax等。
全栈程序员站长
2022/09/20
3.3K0

相似问题

Jquery数值调节按钮

20

excel的数值调节按钮

10

更新按钮未更新

23

jQuery按钮集未反映更新

30

数字输入-始终显示数值调节按钮

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档