【转载】Keras.layers各种层介绍 - 心冰之海 - bk园 https://www.cnblogs.com/lhxsoft/p/13534667.html
本文章向大家介绍KerasKeras.layers
各种层介绍,主要包括Keras,Keras.layers各种层介绍使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
keras的层主要包括:
常用层(Core)、卷积层(Convolutional)、池化层(Pooling)、局部连接层(dense)、递归层(Recurrent)、嵌入层( Embedding)、高级激活层、规范层、噪声层、包装层,当然也可以编写自己的层。
对于层的操作
layer.get_weights() #返回该层的权重(numpy array)
layer.set_weights(weights)#将权重加载到该层
config = layer.get_config()#保存该层的配置
layer = layer_from_config(config)#加载一个配置到该层
#如果层仅有一个计算节点(即该层不是共享层),则可以通过下列方法获得输入张量、输出张量、输入数据的形状和输出数据的形状:
layer.input
layer.output
layer.input_shape
layer.output_shape
#如果该层有多个计算节点。可以使用下面的方法
layer.get_input_at(node_index)
layer.get_output_at(node_index)
layer.get_input_shape_at(node_index)
layer.get_output_shape_at(node_index)
keras.layers.core.Dense(units,activation=None,use_bias=True,
kernel_initializer='glorot_uniform',bias_initializer='zeros',
kernel_regularizer=None,bias_regularizer=None,activity_regularizer=None,
kernel_constraint=None,bias_constraint=None)
参数:
units:大于0的整数,代表该层的输出维度。
use_bias:布尔值,是否使用偏置项
kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。
bias_initializer:偏置向量初始化方法,为预定义初始化方法名的字符串,或用于初始化偏置向量的初始化器。
regularizer:正则项,kernel为权重的、bias为偏执的,activity为输出的
constraints:约束项,kernel为权重的,bias为偏执的。
activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
input_dim:该层输入的维度
本层实现的运算为
output=activation(dot(input,kernel)+bias)
个人理解,即:
输出 = 激活函数【(输入 点乘 * 卷积核 )+偏置】
keras.layers.core.Activation(activation)
激活层对一个层的输出,施加激活函数(sigmod, relu 等等)
参数:
输入shape:任意,当使用激活层作为第一层时,要指定input_shape
输出shape:与输入shape相同
keras.layers.core.Dropout(rate, noise_shape=None, seed=None)
为输入数据施加Dropout操作。
Dropout将在训练过程中每次更新参数时按一定概率(rate) 随机断开输入神经元,Dropout层用于防止过拟合。
参数
rate:0~1的浮点数,控制需要断开的神经元的比例
noise_shape:整数张量,为将要应用在输入上的二值Dropout mask的shape,例如你的输入为(batch_size, timesteps, features),并且你希望在各个时间步上的Dropout mask都相同,则可传入noise_shape=(batch_size, 1, features)。
seed:整数,使用的随机数种子
个人理解,注意:使用的随机数种子seed
固定,则每次进行的“随机丢弃神经元”的操作也是固定的。
keras.layers.core.Flatten()
Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
例子:
model = Sequential()
model.add(Convolution2D(64, 3, 3,
border_mode='same',
input_shape=(3, 32, 32)))
# now: model.output_shape == (None, 64, 32, 32)
model.add(Flatten())
# now: model.output_shape == (None, 65536)
keras.layers.core.Reshape(target_shape)
Reshape层用来将输入shape转换为特定的shape
参数
输入shape:任意,但输入的shape必须固定。当使用该层为模型首层时,需要指定input_shape参数
输出shape:(batch_size,)+target_shape
keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid',
dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None,
activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
一维卷积层(即时域卷积),用以在一维输入信号上进行邻域滤波。当使用该层作为首层时,需要提供关键字参数input_shape。例如(10,128)代表一个长为10的序列,序列中每个信号为128向量。而(None, 128)代表变长的128维向量序列。
该层生成将输入信号与卷积核按照单一的空域(或时域)方向进行卷积。如果use_bias=True,则还会加上一个偏置项,若activation不为None,则输出为经过激活函数的输出。
参数
filters
:卷积核的数目(即输出的维度)kernel_size
:整数或由单个整数构成的list/tuple,卷积核的空域或时域窗长度strides
:整数或由单个整数构成的list/tuple,为卷积的步长。任何不为1的strides均与任何不为1的dilation_rate均不兼容activation
:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)输入shape:形如(samples,steps,input_dim)的3D张量
输出shape:形如(samples,new_steps,nb_filter)的3D张量,因为有向量填充的原因,steps的值会改变
【Tips】可以将Convolution1D看作Convolution2D的快捷版,对例子中(10,32)的信号进行1D卷积相当于对其进行卷积核为(filter_length, 32)的2D卷积。
keras.layers.pooling.MaxPooling1D(pool_size=2, strides=None, padding='valid')
对时域1D信号进行最大值池化。
参数
输入shape:形如(samples,steps,features)的3D张量
输出shape:形如(samples,downsampled_steps,features)的3D张量
keras.layers.pooling.AveragePooling1D(pool_size=2, strides=None, padding='valid')
对时域1D信号进行平均值池化
参数
输入shape:形如(samples,steps,features)的3D张量
输出shape:形如(samples,downsampled_steps,features)的3D张量
keras.layers.recurrent.LSTM(output_dim, init='glorot_uniform', inner_init='orthogonal',
forget_bias_init='one', activation='tanh', inner_activation='hard_sigmoid',
W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0,
dropout_U=0.0)