关于Keras Dense层整理

时间:2021-05-22

我就废话不多说了,大家还是直接看代码吧!

'''Created on 2018-4-4'''keras.layers.core.Dense(units, #代表该层的输出维度activation=None, #激活函数.但是默认 lineruse_bias=True, #是否使用bkernel_initializer='glorot_uniform', #初始化w权重,keras/initializers.pybias_initializer='zeros', #初始化b权重kernel_regularizer=None, #施加在权重w上的正则项,keras/regularizer.pybias_regularizer=None, #施加在偏置向量b上的正则项activity_regularizer=None, #施加在输出上的正则项kernel_constraint=None, #施加在权重w上的约束项bias_constraint=None #施加在偏置b上的约束项)# 所实现的运算是output = activation(dot(input, kernel)+bias)# model.add(Dense(units=64, activation='relu', input_dim=784))# keras初始化所有激活函数,activation:# keras\activations.py# keras\backend\cntk_backend.py# import cntk as C# 1.softmax:# 对输入数据的最后一维进行softmax,一般用在输出层;# ndim == 2,K.softmax(x),其实调用的是cntk,是一个模块;# ndim >= 2,e = K.exp(x - K.max(x)),s = K.sum(e),return e / s# 2.elu# K.elu(x)# 3.selu: 可伸缩的指数线性单元# alpha = 1.6732632423543772848170429916717# scale = 1.0507009873554804934193349852946# return scale * K.elu(x, alpha)# 4.softplus# C.softplus(x)# 5.softsign# return x / (1 + C.abs(x))# 6.relu# def relu(x, alpha=0., max_value=None):# if alpha != 0.:# negative_part = C.relu(-x)# x = C.relu(x)# if max_value is not None:# x = C.clip(x, 0.0, max_value)# if alpha != 0.:# x -= alpha * negative_part# return x# 7.tanh# return C.tanh(x)# 8.sigmoid# return C.sigmoid(x)# 9.hard_sigmoid# x = (0.2 * x) + 0.5# x = C.clip(x, 0.0, 1.0)# return x# 10.linear# return x# keras初始化所有方法,initializer:# Zeros# Ones# Constant(固定一个值)# RandomNormal(正态分布)# RandomUniform(均匀分布)# TruncatedNormal(截尾高斯分布,神经网络权重和滤波器的推荐初始化方法)# VarianceScaling(该初始化方法能够自适应目标张量的shape)# Orthogonal(随机正交矩阵初始化)# Identiy(单位矩阵初始化,仅适用于2D方阵)# lecun_uniform(LeCun均匀分布初始化)# lecun_normal(LeCun正态分布初始化)# glorot_normal(Glorot正态分布初始化)# glorot_uniform(Glorot均匀分布初始化)# he_normal(He正态分布初始化)# he_uniform(He均匀分布初始化,Keras中文文档写错了)# keras正则化,regularizer:# import backend as K# L1: regularization += K.sum(self.l1 * K.abs(x))# L2: regularization += K.sum(self.l2 * K.square(x))

补充知识:keras.layers.Dense()方法及其参数

一、Dense层

keras.layers.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: 神经元节点数数,鸡输出空间维度。

activation: 激活函数,若不指定,则不使用激活函数 (即线性激活: a(x) = x)。

use_bias: 布尔值,该层是否使用偏置向量。

kernel_initializer: kernel 权值矩阵的初始化器

bias_initializer: 偏置向量的初始化器

kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数

bias_regularizer: 运用到偏置向的的正则化函数

activity_regularizer: 运用到层的输出的正则化函数 (它的 “activation”)。

kernel_constraint: 运用到 kernel 权值矩阵的约束函数

bias_constraint: 运用到偏置向量的约束函数

三、示例

例1:

from keras.layers import Dense# 作为 Sequential 模型的第一层model = Sequential()model.add(Dense(32, input_shape=(16,)))# 现在模型就会以尺寸为 (*, 16) 的数组作为输入,# 其输出数组的尺寸为 (*, 32)# 在第一层之后,你就不再需要指定输入的尺寸了:model.add(Dense(32))

注意在Sequential模型的第一层要定义Dense层的形状,此处定义为input_shape=(16,)

例2:

from keras.layers import Densemodel = Sequential()model.add(Dense(512, activation= 'sigmoid', input_dim= 2, use_bias= True))

这里定义了一个有512个神经元节点,使用sigmoid激活函数的神经层,此时输入形状参数为input_dim,注意它与input_shape参数的区别。

input_shape:即张量的形状,从前往后对应由外向内的维度

[[1],[2],[3]] 这个张量的shape为(3,1)

[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]]这个张量的shape为(3,2,2),

[1,2,3,4]这个张量的shape为(4,)

input_dim:代表张量的维度,之前3个例子的input_dim分别为2,3,1。

常见的一种用法:只提供了input_dim=32,说明输入是一个32维的向量,相当于一个一阶、拥有32个元素的张量,它的shape就是(32,)。因此,input_shape=(32, )

四、总结

本文对Dense()方法及其参数做了详细的介绍,并对其用法进行了大概的讲解,有什么问题可以评论区留言或者联系我,我会及时解答。希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章