tf.layers.Dense是一个十分钟要的神经网络接口,在此详细介绍一下该接口的使用,以便刚入门的小伙伴参考,也为自己以后学习作为记录。
tf.layers.Dense:可以理解一个全连接层 相当于添加一个全连接网络层。tensorflow2的API接口地址:https://tensorflow.google.cn/api_docs/python/tf/keras/layers/Dense?hl=en
Dense的函数原型:
tf.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,**kwargs
)
参数:
- units:整数或长整数,输出空间的维数,可以理解为filters数量.
- activation:激活功能(可调用),将其设置为“None”以保持线性激活.
- use_bias:Boolean,表示该层是否使用偏置参数.
- kernel_initializer:权重矩阵的初始化函数;如果为None(默认),则使用tf.get_variable使用的默认初始化程序初始化权重.
- bias_initializer:偏置的初始化函数.
- kernel_regularizer:权重矩阵的正则化函数.
- bias_regularizer:正规函数的偏差.
- activity_regularizer:输出的正则化函数.
- kernel_constraint:由Optimizer更新后应用于内核的可选投影函数(例如,用于实现层权重的范数约束或值约束).该函数必须将未投影的变量作为输入,并且必须返回投影变量(必须具有相同的形状).在进行异步分布式训练时,使用约束是不安全的.
- bias_constraint:由Optimizer更新后应用于偏置的可选投影函数.
属性
- activity_regularizer
可选的正则化函数用于该层的输出.
- dtype
- graph
- input
检索图层的输入张量.
仅适用于图层只有一个输入,即它是否连接到一个输入层.
返回:
输入张量或输入张量列表.
可能引发的异常:
- AttributeError:如果图层连接到多个输入图层.
- RuntimeError:如果在Eager模式下调用.
- AttributeError:如果未找到入站节点.
- input_shape
检索图层的输入形状.
仅适用于图层只有一个输入,即它是否连接到一个输入层,或者所有输入具有相同形状的情况.
返回:
输入形状,作为整数形状元组(或形状元组列表,每个输入张量一个元组).
可能引发的异常:
- AttributeError:如果图层没有定义的input_shape.
- RuntimeError:如果在Eager模式下调用.
- losses
与此Layer相关的损失.
请注意,在急切执行时,获取此属性会计算正规则.使用图形执行时,已经创建了变量正则化运算,并且只是在这里返回.
返回:
张量列表.
- name
- non_trainable_variables
- non_trainable_weights
- output
检索图层的输出张量.
仅适用于图层只有一个输出,即它是否连接到一个输入层.
返回:
输出张量或输出张量列表.
可能引发的异常:
- AttributeError:如果图层连接到多个输入图层.
- RuntimeError:如果在Eager模式下调用.
- output_shape
检索图层的输出形状.
仅适用于图层具有一个输出,或者所有输出具有相同形状的情况.
返回:
输出形状,作为整数形状元组(或形状元组列表,每个输出张量一个元组).
可能引发的异常:
- AttributeError:如果图层没有定义的输出形状.
- RuntimeError:如果在Eager模式下调用.
- scope_name
- trainable_variables
- trainable_weights
- updates
- variables
返回所有图层变量/权重的列表.
返回:
变量列表.
- weights
返回所有图层变量/权重的列表.
返回:
变量列表.
上面参考的是w3cschool的解释。
下面举个DCGANS的输入层的使用例子:
例如:model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))
在神经网络的输入层使用属性input_shape定义输入检索图层的输入形状,input_shape其实就是每个batch输入的形状,例如DCGANS第一层这个例子,表明我每次输入的数据size为100,并且对单次数据的形状不感兴趣。
不是很明确的话,再举个例子,如果我的input_shape修为(100,200),则说明我单次数据的size为100,并且数每个向量长为200,而且我对单次的向量数量不感兴趣。
如果还是不明确的的话,那么咱们在将input_shape修改为(100,200,260),说明我的单次数据size为100,单次数据的向量长度为100,单次的向量数量为260个。如果输入的是图片的话,说明filter数量为100,图片的宽和高分别为200和260。
通过上面的三个说明,小伙伴们应该对input_shape属性的使用较明确了吧^_^,如果不是很明确欢迎留言或者私信。
这个DCGANS第一层的例子中,use_bias=False,不需要偏置参数。对不知道偏置的作用的小伙伴简单介绍一下,直接理解偏置的作用是给神经网络增加了平移的能力。翻译到深度学习里面就是:相当于提高了输入数据对输出结果的控制能力。想象一下在神经网络中在神经元中,output = sum (weights * inputs) + bias,如bias>0,则说明较小的inputs+bias(bias>0),则output更大。
上面例子的第一个参数为7*7*256,即units = 7*7*256,就是说输入数据的深度为7*7*256。
总结一下Dense,就是对神经网络设置了一个全连接层,通过DCGANS的例子说明一下该接口的使用。至于其他参数和属性,有兴趣的小伙伴可以再调试使用一下,也欢迎大家一起分享相关知识。