首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >keras doc 8 BatchNormalization

keras doc 8 BatchNormalization

作者头像
CreateAMind
发布于 2018-07-25 03:25:55
发布于 2018-07-25 03:25:55
1.4K00
代码可运行
举报
文章被收录于专栏:CreateAMindCreateAMind
运行总次数:0
代码可运行

规范化BatchNormalization

BatchNormalization层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, axis=-1, momentum=0.9, weights=None, beta_init='zero', gamma_init='one')

该层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接近0,其标准差接近1

参数

  • epsilon:大于0的小浮点数,用于防止除0错误
  • mode:整数,指定规范化的模式,取0或1
    • 0:按特征规范化,输入的各个特征图将独立被规范化。规范化的轴由参数axis指定。注意,如果输入是形如(samples,channels,rows,cols)的4D图像张量,则应设置规范化的轴为1,即沿着通道轴规范化。输入格式是‘tf’同理。
    • 1:按样本规范化,该模式默认输入为2D
  • axis:整数,指定当mode=0时规范化的轴。例如输入是形如(samples,channels,rows,cols)的4D图像张量,则应设置规范化的轴为1,意味着对每个特征图进行规范化
  • momentum:在按特征规范化时,计算数据的指数平均数和标准差时的动量
  • weights:初始化权重,为包含2个numpy array的list,其shape为[(input_shape,),(input_shape)]
  • beta_init:beta的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。该参数仅在不传递weights参数时有意义。
  • gamma_init:gamma的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。该参数仅在不传递weights参数时有意义。

输入shape

任意,当使用本层为模型首层时,指定input_shape参数时有意义。

输出shape

与输入shape相同

参考文献

  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

【Tips】统计学习的一个重要假设是源空间与目标空间的数据分布是一致的,而神经网络各层输出的分布不一定与输入一致,尤其当网络越深,这种不一致越明显。BatchNormalization把分布一致弱化为均值与方差一致,然而即使是这种弱化的版本也对学习过程起到了重要效果。另一方面,BN的更重要作用是防止梯度弥散,它通过将激活值规范为统一的均值和方差,将原本会减小的激活值得到放大。【@Bigmoyan】

噪声层Noise

GaussianNoise层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
keras.layers.noise.GaussianNoise(sigma)

为层的输入施加0均值,标准差为sigma的加性高斯噪声。该层在克服过拟合时比较有用,你可以将它看作是随机的数据提升。高斯噪声是需要对输入数据进行破坏时的自然选择。

一个使用噪声层的典型案例是构建去噪自动编码器,即Denoising AutoEncoder(DAE)。该编码器试图从加噪的输入中重构无噪信号,以学习到原始信号的鲁棒性表示。

因为这是一个起正则化作用的层,该层只在训练时才有效。

参数

  • sigma:浮点数,代表要产生的高斯噪声标准差

输入shape

任意,当使用该层为模型首层时需指定input_shape参数

输出shape

与输入相同


GaussianDropout层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
keras.layers.noise.GaussianDropout(p)

为层的输入施加以1为均值,标准差为sqrt(p/(1-p)的乘性高斯噪声

因为这是一个起正则化作用的层,该层只在训练时才有效。

参数

  • p:浮点数,断连概率,与Dropout层相同

输入shape

任意,当使用该层为模型首层时需指定input_shape参数

输出shape

与输入相同

参考文献

  • Dropout: A Simple Way to Prevent Neural Networks from Overfitting

包装器Wrapper

TimeDistributed包装器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
keras.layers.wrappers.TimeDistributed(layer)

该包装器可以把一个层应用到输入的每一个时间步上

参数

  • layer:Keras层对象

输入至少为3D张量,下标为1的维度将被认为是时间维

例如,考虑一个含有32个样本的batch,每个样本都是10个向量组成的序列,每个向量长为16,则其输入维度为(32,10,16),其不包含batch大小的input_shape(10,16)

我们可以使用包装器TimeDistributed包装Dense,以产生针对各个时间步信号的独立全连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# as the first layer in a model
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
# now model.output_shape == (None, 10, 8)

# subsequent layers: no need for input_shape
model.add(TimeDistributed(Dense(32)))
# now model.output_shape == (None, 10, 32)

程序的输出数据shape为(32,10,8)

使用TimeDistributed包装Dense严格等价于layers.TimeDistribuedDense。不同的是包装器TimeDistribued还可以对别的层进行包装,如这里对Convolution2D包装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = Sequential()
model.add(TimeDistributed(Convolution2D(64, 3, 3), input_shape=(10, 3, 299, 299)))

Bidirectional包装器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
keras.layers.wrappers.Bidirectional(layer, merge_mode='concat', weights=None)

双向RNN包装器

参数

  • layer:Recurrent对象
  • merge_mode:前向和后向RNN输出的结合方式,为sum,mul,concat,aveNone之一,若设为None,则返回值不结合,而是以列表的形式返回

例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = Sequential()
model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(5, 10)))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

编写自己的层

对于简单的定制操作,我们或许可以通过使用layers.core.Lambda层来完成。但对于任何具有可训练权重的定制层,你应该自己来实现。

这里是一个Keras层应该具有的框架结构,要定制自己的层,你需要实现下面三个方法

  • build(input_shape):这是定义权重的方法,可训练的权应该在这里被加入列表`self.trainable_weights中。其他的属性还包括self.non_trainabe_weights(列表)和self.updates(需要更新的形如(tensor, new_tensor)的tuple的列表)。你可以参考BatchNormalization层的实现来学习如何使用上面两个属性。
  • call(x):这是定义层功能的方法,除非你希望你写的层支持masking,否则你只需要关心call的第一个参数:输入张量
  • get_output_shape_for(input_shape):如果你的层修改了输入数据的shape,你应该在这里指定shape变化的方法,这个函数使得Keras可以做自动shape推断
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras import backend as Kfrom keras.engine.topology import Layerclass MyLayer(Layer):
    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(MyLayer, self).__init__(**kwargs)    def build(self, input_shape):
        input_dim = input_shape[1]
        initial_weight_value = np.random.random((input_dim, output_dim))
        self.W = K.variable(initial_weight_value)
        self.trainable_weights = [self.W]    def call(self, x, mask=None):
        return K.dot(x, self.W)    def get_output_shape_for(self, input_shape):
        return (input_shape[0] + self.output_dim)

调整旧版Keras编写的层以适应Keras1.0

以下内容是你在将旧版Keras实现的层调整为新版Keras应注意的内容,这些内容对你在Keras1.0中编写自己的层也有所帮助。

  • 你的Layer应该继承自keras.engine.topology.Layer,而不是之前的keras.layers.core.Layer。另外,MaskedLayer已经被移除。
  • build方法现在接受input_shape参数,而不是像以前一样通过self.input_shape来获得该值,所以请把build(self)转为build(self, input_shape)
  • 请正确将output_shape属性转换为方法get_output_shape_for(self, train=False),并删去原来的output_shape
  • 新层的计算逻辑现在应实现在call方法中,而不是之前的get_output。注意不要改动__call__方法。将get_output(self,train=False)转换为call(self,x,mask=None)后请删除原来的get_output方法。
  • Keras1.0不再使用布尔值train来控制训练状态和测试状态,如果你的层在测试和训练两种情形下表现不同,请在call中使用指定状态的函数。如,x=K.in_train_phase(train_x, test_y)。例如,在Dropout的call方法中你可以看到:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return K.in_train_phase(K.dropout(x, level=self.p), x)
  • get_config返回的配置信息可能会包括类名,请从该函数中将其去掉。如果你的层在实例化时需要更多信息(即使将config作为kwargs传入也不能提供足够信息),请重新实现from_config。请参考LambdaMerge层看看复杂的from_config是如何实现的。
  • 如果你在使用Masking,请实现compute_mas(input_tensor, input_mask),该函数将返回output_mask。请确保在__init__()中设置self.supports_masking = True
  • 如果你希望Keras在你编写的层与Keras内置层相连时进行输入兼容性检查,请在__init__设置self.input_specs或实现input_specs()并包装为属性(@property)。该属性应为engine.InputSpec的对象列表。在你希望在call中获取输入shape时,该属性也比较有用。
  • 下面的方法和属性是内置的,请不要覆盖它们
    • __call__
    • add_input
    • assert_input_compatibility
    • set_input
    • input
    • output
    • input_shape
    • output_shape
    • input_mask
    • output_mask
    • get_input_at
    • get_output_at
    • get_input_shape_at
    • get_output_shape_at
    • get_input_mask_at
    • get_output_mask_at

现存的Keras层代码可以为你的实现提供良好参考,阅读源代码吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Keras】Keras使用进阶
通常用keras做分类任务的时候,一张图像往往只对应着一种类别,但是在实际的问题中,可能你需要预测出一张图像的多种属性。例如在pyimagesearch的《multi-label-classification-with-keras》这篇文章中提出了一个衣服数据集,整个数据集有两种属性,一种是颜色(blue, red, black),另一种是衣服的类型(dress, jeans, shirt) 。如假设one-hot-vector编码顺序是(blue, red, black, dress, jeans, shirt)则black jeans的 label就是[0,0,1,0,1,0]。
keloli
2019/08/12
1.3K0
keras 基础入门整理
在进行自然语言处理之前,需要对文本进行处理。 本文介绍keras提供的预处理包keras.preproceing下的text与序列处理模块sequence模块
学到老
2019/01/25
1.6K0
Seq2Seq模型的构建
Seq2Seq是指一般的序列到序列的转换任务,特点是输入序列和输出序列是不对齐的,比如机器翻译、自动文摘等等。
故事尾音
2019/12/16
1.4K0
Seq2Seq模型的构建
为什么要做 batch normalization
在机器学习中,我们需要对输入的数据做预处理, 可以用 normalization 归一化 ,或者 standardization 标准化, 用来将数据的不同 feature 转换到同一范围内, normalization 归一化 :将数据转换到 [0, 1] 之间, standardization 标准化:转换后的数据符合标准正态分布
杨熹
2018/12/24
1.4K0
keras doc 5 泛型与常用层
本文摘自 http://keras-cn.readthedocs.io/en/latest/layers/about_layer/,链接异常请阅读原文查看 常用层对应于core模块,core内部定义了一系列常用的网络层,包括全连接、激活层等 泛型模型接口 为什么叫“泛型模型”,请查看一些基本概念 Keras的泛型模型为Model,即广义的拥有输入和输出的模型,我们使用Model来初始化一个泛型模型 from keras.models import Modelfrom keras.layers imp
CreateAMind
2018/07/20
1.9K0
LSTM参数计算与TimeDistributed层
本篇主要讲LSTM的参数计算和Keras TimeDistributed层的使用。LSTM的输入格式为:[Simples,Time Steps,Features]
故事尾音
2019/12/18
2.4K0
LSTM参数计算与TimeDistributed层
keras系列︱seq2seq系列相关实现与案例(feedback、peek、attention类型)
本文介绍了自然语言处理中的seq2seq模型及其在各类任务中的应用,包括机器翻译、文本摘要、情感分析、命名实体识别和问答系统等。文章还探讨了seq2seq模型在深度学习中的重要性以及其应用前景。
悟乙己
2018/01/02
3.2K0
keras系列︱seq2seq系列相关实现与案例(feedback、peek、attention类型)
keras系列︱Sequential与Model模型、keras基本结构功能(一)
该文章介绍了在深度学习模型中,不同的层对输入进行计算,从而影响模型的性能。文章详细讨论了卷积层、池化层、全连接层和LSTM层的特点和作用,以及如何使用这些层来构建高性能的模型。此外,文章还探讨了如何通过冻结层和重新训练层来提高模型的性能。
悟乙己
2018/01/02
10.4K0
keras系列︱Sequential与Model模型、keras基本结构功能(一)
Deep learning基于theano的keras学习笔记(0)-keras常用的代码
这里不推荐使用pickle或cPickle来保存Keras模型。 1. 一般使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含:
李智
2018/08/03
9640
keras系列︱Sequential与Model模型、keras基本结构功能(一)
中文文档:http://keras-cn.readthedocs.io/en/latest/ 官方文档:https://keras.io/ 文档主要是以keras2.0。
全栈程序员站长
2022/11/03
2.1K0
如何在Python中将TimeDistributed层用于Long Short-Term Memory Networks
原文地址:https://machinelearningmastery.com/timedistributed-layer-for-long-short-term-memory-networks-in-python/
Steve Wang
2018/02/06
4K0
keras doc 7 Pooling Connceted Recurrent Embedding Activation
‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
CreateAMind
2018/07/25
8310
keras doc 7 Pooling Connceted Recurrent  Embedding Activation
【深度学习】Tensorflow2.x入门(一)建立模型的三种模式
最近做实验比较焦虑,因此准备结合推荐算法梳理下Tensorflow2.x的知识。介绍Tensorflow2.x的文章有很多,但本文(系列)是按照作者构建模型的思路来展开的,因此不会从Eager Execution开始。另外,尽量摆脱小白文,加入自己的理解。 本文约2.7k字,预计阅读10分钟。
黄博的机器学习圈子
2020/12/11
1.9K0
Deep learning基于theano的keras学习笔记(3)-网络层
1.3 Dropout层 为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层用于防止过拟合。
李智
2018/08/03
1.3K0
使用Keras实现生成式对抗网络GAN
生成式对抗网络(GAN)自2014年提出以来已经成为最受欢迎的生成模型。本文借鉴机器之心对 2014 GAN 论文的解读,在本机运行该Keras项目。 传送门: 机器之心GitHub项目:GAN完整理论推导与实现,Perfect! 接下来主要讲一下如何实现的: 1. 定义一个生成模型: def generator_model(): #下面搭建生成器的架构,首先导入序贯模型(sequential),即多个网络层的线性堆叠 model = Sequential() #添加一个全连接层,输
echobingo
2018/04/25
1.7K0
使用Keras实现生成式对抗网络GAN
Keras介绍
Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:
用户7886150
2021/02/14
1.2K0
深度学习(六)keras常用函数学习 2018最新win10 安装tensorflow1.4(GPU/CPU)+cuda8.0+cudnn8.0-v6 + keras 安装CUDA失败 导入ten
原文链接:https://www.cnblogs.com/DOMLX/p/9769301.html
徐飞机
2018/10/11
2.3K0
Keras官方中文版文档正式发布
机器之心整理 参与:思源 今年 1 月 12 日,Keras 作者 François Chollet‏ 在推特上表示因为中文读者的广泛关注,他已经在 GitHub 上展开了一个 Keras 中文文档项目。而昨日,François Chollet‏ 再一次在推特上表示 Keras 官方文档已经基本完成!他非常感谢翻译和校对人员两个多月的不懈努力,也希望 Keras 中文使用者能继续帮助提升文档质量。 这一次发布的是 Keras 官方中文文档,它得到了严谨的校对而提升了整体质量。但该项目还在进行中,虽然目前已经
朱晓霞
2018/04/18
1.3K0
Keras官方中文版文档正式发布
基于深度学习的图像目标识别预测 | CV | Tensorflow | Keras
在人工智能研究的大潮中,如何模拟人类对于静态或动态目标的有效识别预测一直是研究热点,通过智能技术实现对于目标特征的学习并对特定目标进行快速识别,预测得出目标识别概率,实现基于深度学习模型在复杂背景、不确定外部干扰下的高精度、实时识别目标,能够保持或者优于有丰富经验人员的识别效果。
用户7623498
2020/08/04
1.6K0
基于深度学习的图像目标识别预测 | CV | Tensorflow | Keras
解决cannot import name ‘BatchNormalization‘ from ‘keras.layers.normalization‘
最近在使用Keras进行深度学习模型训练的过程中,遇到了一个错误:​​cannot import name 'BatchNormalization' from 'keras.layers.normalization'​​。经过一番调查和尝试,我找到了解决方法,现在和大家分享一下。
大盘鸡拌面
2023/11/01
8880
推荐阅读
相关推荐
【Keras】Keras使用进阶
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验