前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Deep learning基于theano的keras学习笔记(3)-网络层

Deep learning基于theano的keras学习笔记(3)-网络层

作者头像
李智
发布2018-08-03 17:35:13
1.1K0
发布2018-08-03 17:35:13
举报
文章被收录于专栏:李智的专栏李智的专栏
1. 常用层

1.1 Dense层

代码语言:javascript
复制
keras.layers.core.Dense(output_dim, init='glorot_uniform', activation='linear', weights=None, W_regularizer=None, 
                        b_regularizer=None, activity_regularizer=None, W_constraint=None,b_constraint=None, bias=True, 
                        input_dim=None)

1.2 Activation层

代码语言:javascript
复制
keras.layers.core.Activation(activation)

1.3 Dropout层 为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(p)的输入神经元连接,Dropout层用于防止过拟合。

代码语言:javascript
复制
keras.layers.core.Dropout(p)#p:0~1的浮点数,控制需要断开的链接的比例

1.4 SpatialDropout2D(3D)层 与Dropout的作用类似,但它断开的是整个2D(3D)特征图,而不是单个神经元。如果一张特征图的相邻像素之间有很强的相关性(通常发生在低层的卷积层中),那么普通的dropout无法正则化其输出,否则就会导致明显的学习率下降。这种情况下,SpatialDropout2D(3D)能够帮助提高特征图之间的独立性,应该用其取代普通的Dropout

代码语言:javascript
复制
keras.layers.core.SpatialDropout2D(p, dim_ordering='default')
#p:0~1的浮点数,控制需要断开的链接的比例;dim_ordering:'th'或'tf'
#默认为~/.keras/keras.json配置的image_dim_ordering值

1.5 Flatten层 Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。

代码语言:javascript
复制
keras.layers.core.Flatten()

1.6 Reshape层

代码语言:javascript
复制
Reshape层用来将输入shape转换为特定的shape
代码语言:javascript
复制
keras.layers.core.Reshape(target_shape)
#target_shape:目标shape,为整数的tuple,不包含样本数目的维度(batch大小)

1.7 Permute层

代码语言:javascript
复制
Permute层将输入的维度按照给定模式进行重排,例如,当需要将RNN和CNN网络连接时,可能会用到该层。
代码语言:javascript
复制
keras.layers.core.Permute(dims)
#dims:整数tuple,指定重排的模式,不包含样本数的维度。重拍模式的下标从1开始。
#例如(2,1)代表将输入的第二个维度重拍到输出的第一个维度,而将输入的第一个维度重排到第二个维度

1.8 RepeatVector层 RepeatVector层将输入重复n次

代码语言:javascript
复制
keras.layers.core.RepeatVector(n)

1.9 Merge层 Merge层根据给定的模式,将一个张量列表中的若干张量合并为一个单独的张量

代码语言:javascript
复制
keras.engine.topology.Merge(layers=None, mode='sum', concat_axis=-1, dot_axes=-1,output_shape=None, 
                            node_indices=None, tensor_indices=None, name=None)
#mode方式有“sum”,“mul”,“concat”,“ave”,“cos”,“dot”

1.10 Lambda层 本函数用以对上一层的输出施以任何Theano/TensorFlow表达式

代码语言:javascript
复制
keras.layers.core.Lambda(function, output_shape=None, arguments={})
#例子:model.add(Lambda(lambda x: x ** 2))

1.11 ActivityRegularizer层 经过本层的数据不会有任何变化,但会基于其激活值更新损失函数值

代码语言:javascript
复制
keras.layers.core.ActivityRegularization(l1=0.0, l2=0.0)
#l1:1范数正则因子(正浮点数);l2:2范数正则因子(正浮点数)

1.12 Masking层 使用给定的值对输入的序列信号进行“屏蔽”,用以定位需要跳过的时间步

代码语言:javascript
复制
keras.layers.core.Masking(mask_value=0.0)

#考虑输入数据x是一个形如(samples,timesteps,features)的张量,现将其送入LSTM层。
#因为你缺少时间步为3和5的信号,所以你希望将其掩盖。这时候应该:赋值x[:,3,:] = 0.,x[:,5,:] = 0.
#在LSTM层之前插入mask_value=0.的Masking层
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))

1.13 Highway层

代码语言:javascript
复制
Highway层建立全连接的Highway网络,这是LSTM在前馈神经网络
代码语言:javascript
复制
keras.layers.core.Highway(init='glorot_uniform', transform_bias=-2, activation='linear', weights=None, 
                        W_regularizer=None, b_regularizer=None, activity_regularizer=None, 
                        W_constraint=None, b_constraint=None, bias=True, input_dim=None)

1.14 MaxoutDense层 MaxoutDense层以nb_features个Dense(input_dim,output_dim)线性层的输出的最大值为输出。MaxoutDense可对输入学习出一个凸的、分段线性的激活函数。


2. 卷积层

2.1 Convolution1D层 一维卷积层,用以在一维输入信号上进行领域滤波。当使用该层作为首层时,需要提供关键字参数input_diminput_shape。例如input_dim=128长为128的向量序列输入,而input_shape=(10,128)代表一个长为10的128向量序列

代码语言:javascript
复制
keras.layers.convolutional.Convolution1D(nb_filter, filter_length, init='uniform',

                                        activation='linear', weights=None, border_mode='valid', 
                                        subsample_length=1, W_constraint=None,  b_constraint=None, 
                                        bias=True, input_dim=None, input_length=None)

2.2 AtrousConvolution1D层 AtrousConvolution1D层用于对1D信号进行滤波,是膨胀/带孔洞的卷积。当使用该层作为首层时,需要提供关键字参数input_diminput_shape。例如input_dim=128长为128的向量序列输入,而input_shape=(10,128)代表一个长为10的128向量序列

代码语言:javascript
复制
keras.layers.convolutional.AtrousConvolution1D(nb_filter, filter_length, init='uniform', activation='linear', 
                                                weights=None, border_mode='valid', subsample_length=1, 
                                                activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)

2.3 Convolution2D层 二维卷积层对二维输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,128,128)代表128*128的彩色RGB图像

代码语言:javascript
复制
keras.layers.convolutional.Convolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', 
                                        activation='linear', weights=None, border_mode='valid',
                                        subsample=(1, 1), dim_ordering='th', W_regularizer=None, 
                                        b_regularizer=None, activity_regularizer=None, W_constraint=None, 
                                        b_constraint=None, bias=True)

2.4 AtrousConvolution2D层 该层对二维输入进行Atrous卷积,也即膨胀卷积或带孔洞的卷积。当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,128,128)代表128*128的彩色RGB图像

代码语言:javascript
复制
keras.layers.convolutional.AtrousConvolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', 
                                                activation='linear', weights=None, border_mode='valid', 
                                                subsample=(1, 1), atrous_rate=(1, 1), dim_ordering='th', 
                                                W_regularizer=None, b_regularizer=None, activity_regularizer=None, 
                                                W_constraint=None, b_constraint=None, bias=True)

2.5 SeparableConvolution2D层

代码语言:javascript
复制
该层是对2D输入的可分离卷积。可分离卷积首先按深度方向进行卷积(对每个输入通道分别卷积),然后逐点进行卷积,将上一步的卷积结果混合到输出通道中。参数`depth_multiplier`控制了在`depthwise`卷积(第一步)的过程中,每个输入通道信号产生多少个输出通道。直观来说,可分离卷积可以看做讲一个卷积核分解为两个小的卷积核,或看作`Inception`模块的一种极端情况。当使用该层作为第一层时,应提供`input_shape`参数。例如`input_shape = (3,128,128)`代表128*128的彩色RGB图像
代码语言:javascript
复制
keras.layers.convolutional.SeparableConvolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', 
                                                activation='linear', weights=None, border_mode='valid', 
                                                subsample=(1, 1), depth_multiplier=1, dim_ordering='default', 
                                                depthwise_regularizer=None, pointwise_regularizer=None,
                                                 b_regularizer=None,activity_regularizer=None, epthwise_constraint=None, 
                                                 pointwise_constraint=None, b_constraint=None, bias=True)

2.6 Deconvolution2D层

代码语言:javascript
复制
该层是卷积操作的转置(反卷积)。需要反卷积的情况通常发生在用户想要对一个普通卷积的结果做反方向的变换。例如,将具有该卷积层输出shape的tensor转换为具有该卷积层输入shape的tensor。,同时保留与卷积层兼容的连接模式。当使用该层作为第一层时,应提供`input_shape`参数。例如`input_shape = (3,128,128)`代表128*128的彩色RGB图像
代码语言:javascript
复制
keras.layers.convolutional.Deconvolution2D(nb_filter, nb_row, nb_col, output_shape, init='glorot_uniform', 
                                            activation='linear', weights=None, border_mode='valid', 
                                            b_regularizer=None, ctivity_regularizer=None, 
                                            W_constraint=None, b_constraint=None, bias=True)

2.7 Convolution3D层 三维卷积对三维的输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (3,10,128,128)代表对10帧128*128的彩色RGB图像进行卷积。目前,该层仅仅在使用Theano作为后端时可用

代码语言:javascript
复制
keras.layers.convolutional.Convolution3D(nb_filter, kernel_dim1, kernel_dim2, kernel_dim3, init='glorot_uniform', 
                                        activation='linear', weights=None, border_mode='valid', 
                                        subsample=(1, 1, 1), dim_ordering='th', W_regularizer=None, 
                                        b_regularizer=None, activity_regularizer=None, W_constraint=None,
                                        b_constraint=None, bias=True)

2.8 Cropping层

代码语言:javascript
复制
#Cropping1D层
keras.layers.convolutional.Cropping1D(cropping=(1, 1))
#在时间轴(axis1)上对1D输入(即时间序列)进行裁剪

#Cropping2D层
keras.layers.convolutional.Cropping2D(cropping=((0, 0), (0, 0)), dim_ordering='default')
#对2D输入(图像)进行裁剪,将在空域维度,即宽和高的方向上裁剪

#Cropping3D层
keras.layers.convolutional.Cropping3D(cropping=((1, 1), (1, 1), (1, 1)), dim_ordering='default')
#对2D输入(图像)进行裁剪

2.9 UpSampling层

代码语言:javascript
复制
#UpSampling1D层
keras.layers.convolutional.UpSampling1D(length=2)
#在时间轴上,将每个时间步重复length次

#UpSampling2D层
keras.layers.convolutional.UpSampling2D(size=(2, 2), dim_ordering='th')
#将数据的行和列分别重复size[0]和size[1]次

UpSampling3D层
keras.layers.convolutional.UpSampling3D(size=(2, 2, 2), dim_ordering='th')
#将数据的三个维度上分别重复size[0]、size[1]和ize[2]次
#本层目前只能在使用Theano为后端时可用

2.10 ZeroPadding层

代码语言:javascript
复制
#ZeroPadding1D层
keras.layers.convolutional.ZeroPadding1D(padding=1)
#对1D输入的首尾端(如时域序列)填充0,以控制卷积以后向量的长度

#ZeroPadding2D层
keras.layers.convolutional.ZeroPadding2D(padding=(1, 1), dim_ordering='th')
#对2D输入(如图片)的边界填充0,以控制卷积以后特征图的大小

#ZeroPadding3D层
keras.layers.convolutional.ZeroPadding3D(padding=(1, 1, 1), dim_ordering='th')
#将数据的三个维度上填充0
#本层目前只能在使用Theano为后端时可用
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 常用层
  • 2. 卷积层
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档