20 keras 核心层

从这篇开始介绍Keras的Layers,就是构成网络的每一层。Keras实现了很多层,包括核心层、卷基层、RNN网络

层等诸多常用的网络结构。下面开介绍核心层中包含了哪些内容。因为这个核心层我现在还没有全部用到,所以会有一部分内容我并不是十分了解,因此直接附带了原文档介绍。希望有了解的博友指点一二。

一、核心层基类

keras.layers.core.Layer()  

下面介绍一下该类中包含的几个基本方法。

1 set_previous

#  把previous_layer层的输出连接到当前层的输入  
set_previous(previous_layer)  

返回:None
参数:
previous_layer : Layer对象

2 get_output

# 获取某层网络的输出  
get_output(train) 

返回:Theano tensor
参数:
train : Boolean. 指定是在训练模式下还是测试模型下计算该层的输出。

3 get_input

# 获取某层网络的输入  
get_input(train) 

返回:Theano tensor
参数:
train : 同上。

4 get_weights

# 获取网络的权值  
get_weights()  

返回:一个numpy array组成的list,每一层的参数值是一个numpy array

5 set_weights

# 设置网络权值参数  
set_weights(weights)  

参数:
weights : 一个numpy array组成的list,每一层的权值是一个numpy array,且该list中的元素顺序要与get_weights(self)中返回的一致。(就是对应好每一层,不要打乱了顺序)

6 get_config

get_config() 

返回:描述网络的配置信息字典

二、Dense类(标准的一维全连接层)

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, input_dim=None)  

inputshape: 2维 tensor(nb_samples, input_dim)
outputshape: 2维 tensor(nb_samples, output_dim)
参数

  • output_dim: int >= 0,输出结果的维度
  • init : 初始化权值的函数名称或Theano function。可以使用Keras内置的(内置初始化权值函数见这里),也可以传递自己编写的Theano function。如果不给weights传递参数时,则该参数必须指明。
  • ** activation** : 激活函数名称或者Theano function。可以使用Keras内置的(内置激活函数见这里),也可以是传递自己编写的Theano function。如果不明确指定,那么将没有激活函数会被应用。
  • ** weights :**用于初始化权值的numpy arrays组成的list。这个List至少有1个元素,其shape为(input_dim, output_dim)。(如果指定init了,那么weights可以赋值None)
  • ** W_regularizer:**权值的规则化项,必须传入一个WeightRegularizer的实例(比如L1或L2规则化项,详细的内置规则化见这里)。
  • ** b_regularizer:**偏置值的规则化项,必须传入一个WeightRegularizer的实例(比如L1或L2规则化项,详细的内置规则化见这里)。
  • ** activity_regularizer:**网络输出的规则化项,必须传入一个ActivityRegularizer的实例(详细的内置规则化见这里)。
  • ** W_constraint:**权值约束,必须传入一个constraints的实例(详细的约束限制见这里)。
  • ** b_constraint:**偏置约束,必须传入一个constraints的实例(详细的约束限制见这里)。
  • ** input_dim:**输入数据的维度。这个参数会在模型的第一层中用到。

三、TimeDistributedDense类

keras.layers.core.TimeDistributedDense(output_dim,init='glorot_uniform', activation='linear', weights=None  
W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None,  
input_dim=None, input_length=None) 

** 这是一个基于时间维度的全连接层。主要就是用来构建RNN(递归神经网络)的,但是在构建RNN时需要设置return_sequences=True
** inputshape
: 3维 tensor(nb_samples, timesteps,input_dim)
** 参数**:

  • output_dim: int >= 0,输出结果的维度
  • init : 初始化权值的函数名称或Theano function。可以使用Keras内置的(内置初始化权值函数见这里),也可以传递自己编写的Theano function。如果不给weights传递参数时,则该参数必须指明。
  • ** activation** : 激活函数名称或者Theano function。可以使用Keras内置的(内置激活函数见这里),也可以是传递自己编写的Theano function。如果不明确指定,那么将没有激活函数会被应用。
  • ** weights :**用于初始化权值的numpy arrays组成的list。这个List至少有1个元素,其shape为(input_dim, output_dim)。(如果指定init了,那么weights可以赋值None)
  • ** W_regularizer:**权值的规则化项,必须传入一个WeightRegularizer的实例(比如L1或L2规则化项,详细的内置规则化见这里)。
  • ** b_regularizer:**偏置值的规则化项,必须传入一个WeightRegularizer的实例(比如L1或L2规则化项,详细的内置规则化见这里)。
  • ** activity_regularizer:**网络输出的规则化项,必须传入一个ActivityRegularizer的实例(详细的内置规则化见这里)。
  • ** W_constraint:**权值约束,必须传入一个constraints的实例(详细的约束限制见这里)。
  • ** b_constraint:**偏置约束,必须传入一个constraints的实例(详细的约束限制见这里)。
  • ** input_dim:**输入数据的维度。这个参数会在模型的第一层中用到。
  • ** input_length:**Length of input sequences, whenit is constant. This argument is required if you are going to connect Flattenthen Dense layers upstream (without it, the shape of the dense outputs cannotbe computed).
# input shape: (nb_samples, timesteps,10)  
model.add(LSTM(5, return_sequences=True, input_dim=10)) # output shape: (nb_samples, timesteps, 5)  
model.add(TimeDistributedDense(15)) # output shape:(nb_samples, timesteps, 15)  

四、AutoEncoder类

keras.layers.core.AutoEncoder(encoder, decoder,output_reconstruction=True, weights=None)  

这是一个用于构建很常见的自动编码模型。如果参数output_reconstruction=True,那么dim(input)=dim(output);否则dim(output)=dim(hidden)。
inputshape: 取决于encoder的定义
outputshape:取决于decoder的定义
参数:

  • encoder:编码器,是一个layer类型或layer容器类型。
  • decoder:解码器,是一个layer类型或layer容器类型。
  • output_reconstruction:boolean。值为False时,调用predict()函数时,输出是经过最深隐层的激活函数。
  • weights:用于初始化权值的numpy arrays组成的list。这个List至少有1个元素,其shape为(input_dim, output_dim)。
    举例
from keras.layers import containers  
  
# input shape: (nb_samples, 32)  
encoder =containers.Sequential([Dense(16, input_dim=32), Dense(8)])  
decoder =containers.Sequential([Dense(16, input_dim=8), Dense(32)])  
   
autoencoder =Sequential()  
autoencoder.add(AutoEncoder(encoder=encoder, decoder=decoder,output_reconstruction=False)) 

五、Activation类

keras.layers.core.Activation(activation)  

** **Apply an activation function tothe input.(貌似是把激活函数应用到输入数据的一种层结构)

  • ** inputshape**: 任意。当把这层作为某个模型的第一层时,需要用到该参数(元组,不包含样本轴)。
  • ** outputshape**:同input shape
    参数
  • ** activation:**编码器,是一个layer类型或layer容器类型。
  • ** decoder:**解码器,是一个layer类型或layer容器类型。
  • ** output_reconstruction:**boolean。值为False时,调用predict()函数时,输出是经过最深隐层的激活函数。Otherwise, the output of thefinal decoder layer is presented. Be sure your validation data conforms to thislogic if you decide to use any.(这一块还不太了解,待以后了解了再补充)
  • ** weights:**激活函数名称或者Theano function。可以使用Keras内置的(内置激活函数见这里),也可以是传递自己编写的Theano function。如果不明确指定,那么将没有激活函数会被应用。

六、Dropout类

keras.layers.core.Dropout(p)  

Dropout的意思就是训练和预测时随机减少特征个数,即去掉输入数据中的某些维度,用于防止过拟合。通过设置Dropout中的参数p,在训练和预测模型的时候,每次更新都会丢掉(总数*p)个特征,以达到防止过拟合的目的。可以参考:Dropout: A Simple Way to PreventNeural Networks from Overfitting
强烈推荐看一下文章《理解dropout》,可以使你更充分的理解dropout。

  • ** inputshape**: 任意。当把这层作为某个模型的第一层时,需要用到该参数(元组,不包含样本轴)。

  • ** outputshape**:同input shape
    参数

  • ** p:**float(0≤p<1),每次训练要丢弃特征的比例。

七、Reshape类

keras.layers.core.Reshape(dims)  

就是把输入数据的shape重新reshape一下,原数据保持不变。
inputshape: 任意。当把这层作为某个模型的第一层时,需要用到该参数(元组,不包含样本轴)。
outputshape:(nb_samples, dims)
参数:

  • dims:整数型元组,新的shape。
    简单举例:
# input shape: (nb_samples, 10)  
model.add(Dense(100, input_dim=10)) # output shape: (nb_samples, 100)  
model.add(Reshape(dims=(10, 10)))  # output shape: (nb_samples, 10, 10)  

八、Flatten类

keras.layers.core.Flatten()  

把多维输入转换为1维输入,名字很形象,就是把输入给压平了。
inputshape: 任意。当把这层作为某个模型的第一层时,需要用到该参数(元组,不包含样本轴)。
outputshape:(nb_samples,nb_input_units)

九、RepeatVector类

keras.layers.core.RepeatVector(n)  

把1维的输入重复n次。假设输入维度为(nb_samples, dim),那么输出shape就是(nb_samples, n, dim)
inputshape: 任意。当把这层作为某个模型的第一层时,需要用到该参数(元组,不包含样本轴)。
outputshape:(nb_samples,nb_input_units)
参数:
n:int,重复n次

十、Permute类

keras.layers.core.Permute(dims)  

根据给定的元组交换输入数据维度。主要是用于RNNs和Convnets。
inputshape: 任意。当把这层作为某个模型的第一层时,需要用到该参数(元组,不包含样本轴)。
outputshape:和input shape一样。但是维度需要根据指定的元组顺序重新排序。
参数:元组,明确指出交换对象。例如(2,1)就是交换输入的第一维和第二维。
简单举例:

# input shape: (nb_samples, 10)  
model.add(Dense(50, input_dim=10)) # output shape: (nb_samples, 50)  
model.add(Reshape(dims=(10, 5))) # output shape:(nb_samples, 10, 5)  
model.add(Permute(dims=(2, 1))) #output shape: (nb_samples, 5, 10) 

十一、ActivityRegularization类

keras.layers.core.ActivityRegularization(l1=0., l2=0.)  

保持输入不变,在代价函数基础上增加一项针对input activity的L1和L2规则化项。
这个层的可以用来降低前一层激活函数结果的稀疏性。

十二、MaxoutDense类

keras.layers.core.MaxoutDense(output_dim,nb_feature=4, init='glorot_uniform', weights=None,  
W_regularizer=None, b_regularizer=None, activity_regularizer=None,  
W_constraint=None, b_constraint=None, input_dim=None)  

A dense maxout layer. AMaxoutDense layer takes the element-wise maximum of nb_feature Dense(input_dim, output_dim) linear layers. This allows thelayer to learn a convex, piecewise linear activation function over the inputs.See this paper for more details. Note that this is a linear layer -- if youwish to apply activation function (you shouldn't need to -- they are universalfunction approximators), an Activation layer must be added after.

  • ** inputshape**:2维tensor,shape为(nb_samples, input_dim)。
  • *** outputshape:2维tensor,shape为(nb_samples, output_dim)。
  • *** output_dim : int >= 0
  • *** nb_feature : int >= 0. the number of features tocreate for the maxout. This is equivalent to the number of piecewise elementsto be allowed for the activation function.。
  • *** init: 初始化权值的函数名称或Theano function。可以使用Keras内置的(内置初始化权值函数见这里),也可以传递自己编写的Theano function。如果不给weights传递参数时,则该参数必须指明。
  • *** weights: 用于初始化权值的numpy arrays组成的list。这个List至少有1个元素,其shape为(input_dim, output_dim)。(如果指定init了,那么weights可以赋值None)
  • *** W_regularizer:权值的规则化项,必须传入一个WeightRegularizer的实例(比如L1或L2规则化项,详细的内置规则化见这里)。
  • *** b_regularizer:偏置值的规则化项,必须传入一个WeightRegularizer的实例(比如L1或L2规则化项,详细的内置规则化见这里)。
  • *** activity_regularizer:网络输出的规则化项,必须传入一个ActivityRegularizer的实例(详细的内置规则化见这里)。
  • *** W_constraint:权值约束,必须传入一个constraints的实例(详细的约束限制见这里)。
  • *** b_constraint:偏置约束,必须传入一个constraints的实例(详细的约束限制见这里)。
  • *** input_dim:输入数据的维度。这个参数会在模型的第一层中用到。
    简单举例:
# input shape: (nb_samples, 10)  
model.add(Dense(100, input_dim=10)) # output shape: (nb_samples, 100)  
model.add(MaxoutDense(50, nb_feature=10)) # output shape: (nb_samples, 50) 

十三、Merge类

keras.layers.core.Merge(models, mode='sum')  

把layers(or containers) list合并为一个层,用以下三种模式中的一种:sum,mul或 concat。
参数:
layers : list of layers or containers.
mode : String. {‘sum’ , ‘mul’ , ‘concat’}中的一种。其中sum和mul是对待合并层输出做一个简单的求和、乘积运算,因此要求待合并层输出shape要一致。concat是将待合并层输出沿着最后一个维度进行拼接,因此要求待合并层输出只有最后一个维度不同。

简单举例:

left = Sequential()  
left.add(Dense(50, input_shape=(784,)))  
left.add(Activation('relu'))  
   
right = Sequential()  
right.add(Dense(50, input_shape=(784,)))  
right.add(Activation('relu'))  
   
model = Sequential()  
model.add(Merge([left,right], mode='sum'))  
   
model.add(Dense(10))  
model.add(Activation('softmax'))  
   
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')  
   
model.fit([X_train, X_train], Y_train, batch_size=128, nb_epoch=20, validation_data=([X_test, X_test], Y_test)) 

十四、Masking类

keras.layers.core.Masking(mask_value=0.)  

Create a mask for the input databy usingmask_value as the sentinel value whichshould be masked out. Given an input of dimensions(nb_samples,timesteps, input_dim), return the input untouched as output, and supply a maskof shape (nb_samples, timesteps)where all timesteps which hadall their values equal to mask_value are masked out.
inputshape: 3D tensor with shape: (nb_samples, timesteps,features).
outputshape: 3D tensor with shape:(nb_samples, timesteps,features).

原文地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容