keras.layers.LSTM、Dense等 传递input_shape参数给第一层

本文介绍了在Keras中如何为模型指定输入数据尺寸,强调了第一层需要输入_shape信息的原因。通过示例展示了*args和**kwargs的用法,特别是LSTM层如何通过**kwargs传递input_shape。此外,还解释了*args用于传递不定数量的位置参数,**kwargs用于传递不定数量的关键字参数。

@创建于:20210413
@修改于:20210413

1、背景

在keras.layers的Sequential 顺序模型API中,顺序模型是多个网络层的线性堆叠,可以通过将层的列表传递给Sequential 的构造函数。包含的方法和属性有:

  • model.layers 是包含模型网络层的展平列表。
  • model.inputs 是模型输入张量的列表。
  • model.outputs 是模型输出张量的列表。

但是keras.layers的网络层(包括Dense、LSTM、ConvLSTM2D等)没有显式存在Input_shape参数。

  • 为什么要这么设置;
  • 还可以设置哪些其他类似的参数?

2、指定输入数据的尺寸

模型需要知道它所期望的输入的尺寸。出于这个原因,顺序模型中的第一层(只有第一层,因为下面的层可以自动地推断尺寸)需要接收关于其输入尺寸的信息。有几种方法来做到这一点:

  • 传递一个input_shape 参数给第一层。它是一个表示尺寸的元组(一个整数或None 的元组,其中None 表示可能为任何正整数)。在input_shape 中不包含数据的batch 大小。
  • 某些2D 层,例如Dense,支持通过参数input_dim 指定输入尺寸,某些3D 时序层支持input_dim 和input_length 参数。
  • 如果你需要为你的输入指定一个固定的batch 大小(这对stateful RNNs 很有用),你可以传递一个batch_size 参数给一个层。如果你同时将batch_size=32 和input_shape=(6,8) 传递给一个层,那么每一批输入的尺寸就为(32,6,8)。
    因此,下面的代码片段是等价的:
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, input_dim=784))

上面的参考自:
keras-docs-zh-master_text版本 - https://github.com/wanzhenchn/keras-docs-zh

3、核心网络层没有显式的input_shape, input_dim参数,如何传递的?

本人使用的是tensorflow 2.3.0,对应的keras版本是2.3.1(可能是)。
input_shape, input_dim参数是通过**kwargs传递的。
以LSTM为例:

  • LSTM的API接口,继承自recurrent.LSTM;
  • recurrent.LSTM继承自RNN(Layer):里面就有input_shape的来源;
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值