keras常见层参数个数计算1

本文详细介绍了Keras中Dense、LSTM、SimpleRNN及conv2d、MaxPooling2D、flatten层的API、实现和参数计算。通过实例展示了如何计算不同层的参数数量,帮助理解神经网络中不同层的结构和参数需求。
摘要由CSDN通过智能技术生成

1 Dense

1.1 API介绍

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: 激活函数 (详见 activations)。 若不指定,则不使用激活函数 (即,「线性」激活: a(x) = x)。
  • use_bias: 布尔值,该层是否使用偏置向量。
  • kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
  • bias_initializer: 偏置向量的初始化器 (see initializers).
  • kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
  • bias_regularizer: 运用到偏置向的的正则化函数 (详见 regularizer)。
  • activity_regularizer: 运用到层的输出的正则化函数 (它的 “activation”)。 (详见 regularizer)。
  • kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
  • bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。

1.2 Dense实现

Dense 即全连接层其实现如下:
output = activation(dot(input, kernel) + bias)

  • activation 是按逐个元素计算的激活函数
  • kernel 是由网络层创建的权值矩阵
  • bias 是其创建的偏置向量 (只在 use_biasTrue 时才有用)

1.3 Dense参数计算

参数个数计算

model = Sequential()
model.add(Dense(100, activation='relu', input_shape=(4,)))
model.add(Dense(50, activation='relu'))
model.add(Dense(2))
model.summary()

在这里插入图片描述
通俗的理解

dense_15 patam: 输入4维,输出100维 =》4 * 100 + 100维偏置 =》4 * 100 + 100 = 500
dense_16 patam: 输入100维,输出50维 =》100 * 50 + 50维偏置 =》100 * 50 + 50 = 5050
dense_17 patam: 输入50维,输出2维 =》0 * 2 + 2维偏置 =》50 * 2 + 2 = 102

数学的理解

一个神经元干了什么事我们参考上面Dense的实现可以发现,就是对样本求权重再加上偏置。
我们假设又n个样本其公式就变成了 ∑ i = 1 n w i ∗ x i + b \sum_{i=1}^{n} w_{i} * x_{i}+b i=1nwixi+b,即需要(n + 1)个参数。
有m个神经元,即接入m维就需要m * (n + 1)个参数。
带入一下上面的例子:
dense_15: m = 100, n = 4, 100 * (4 + 1)= 500
dense_16: m = 50, n = 100, 50 * (100 + 1)= 5050
dense_16: m = 2, n = 50, 2 * (50 + 1)= 102

设置use_bias为False在这里插入图片描述
从和上面的分析过程做个对比,不带bias,一个神经元参数个数就变成了n,m个就变成了m * n。

参考

https://keras.io/zh/layers/core/#dense

2 LSTM

2.1 API介绍

keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)

参数解释

  • units: 正整数,输出空间的维度。
  • activation: 要使用的激活函数 (详见 activations)。如果传入 None,则不使用激活函数 (即线性激活:a(x) = x)。
  • recurrent_activation: 用于循环时间步的激活函数 (详见 activations)。 默认:分段线性近似 sigmoid (hard_sigmoid)。如果传入 None,则不使用激活函数 (即线性激活:a(x) = x)。
  • use_bias: 布尔值,该层是否使用偏置向量。
  • kernel_initializer: kernel 权值矩阵的初始化器,用于输入的线性转换 (详见 initializers)。
  • recurrent_initializer: recurrent_kernel 权值矩阵的初始化器,用于循环层状态的线性转换 (详见 initializers)。
  • bias_initializer:偏置向量的初始化器 (详见initializers).
  • unit_forget_bias: 布尔值。 如果为 True,初始化时,将忘记门的偏置加1。将其设置为True同时还会强制 bias_initializer="zeros"。这个建议来自 Jozefowicz et al.
  • kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
  • recurrent_regularizer: 运用到 recurrent_kernel 权值矩阵的正则化函数 (详见 regularizer)。
  • bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。
  • activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。
  • kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
  • recurrent_constraint: 运用到 recurrent_kernel 权值矩阵的约束函数 (详见 constraints)。
  • bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。
  • dropout: 在 0 和 1 之间的浮点数。单元的丢弃比例,用于输入的线性转换。
  • recurrent_dropout: 在0和1之间的浮点数。单元的丢弃比例,用于循环层状态的线性转换。
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值