当前位置: 首页 > 网络游戏 >

每日观察!keras.layers传递"input_shape"参数给第一层

时间:2023-02-20 02:08:55 来源:哔哩哔哩

背景

在keras.layers的Sequential 顺序模型API中,顺序模型是多个网络层的线性堆叠


(资料图)

model.layers 是包含模型网络层的展平列表。

model.inputs 是模型输入张量的列表。

model.outputs 是模型输出张量的列表。

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

指定输入数据的尺寸

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

传递一个input_shape 参数给第一层。它是一个表示尺寸的元组(一个整数或None 的元组,其中None 表示可能为任何正整数)。在input_shape 中不包含数据的batch 大小。

某些2D 层,例如Dense,支持通过参数input_dim 指定输入尺寸,某些3D 时序层支持input_dim 和input_length 参数。

如果你需要为你的输入指定一个固定的batch 大小,你可以传递一个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))

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

input_shape, input_dim参数是通过**kwargs传递的。以LSTM为例:

LSTM的API接口,继承自recurrent.LSTM;

recurrent.LSTM继承自RNN(Layer):里面就有input_shape的来源;

RNN(Layer)继承自Layer:里面有可以允许的字典的键。

@keras_export('keras.layers.LSTM', v1=[])class LSTM(recurrent.DropoutRNNCellMixin, recurrent.LSTM):@keras_export(v1=['keras.layers.LSTM'])class LSTM(RNN):@keras_export('keras.layers.RNN')class RNN(Layer):    if 'input_shape' not in kwargs and (        'input_dim' in kwargs or 'input_length' in kwargs):      input_shape = (kwargs.pop('input_length', None),                     kwargs.pop('input_dim', None))      kwargs['input_shape'] = input_shape      @keras_export('keras.layers.Layer')class Layer(module.Module, version_utils.LayerVersionSelector):allowed_kwargs = {        'input_dim',        'input_shape',        'batch_input_shape',        'batch_size',        'weights',        'activity_regularizer',        'autocast',    }

**kwargs 是将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值。下面这段代码演示了如何使用kwargs。

关键词: 输入数据
x 广告
x 广告

Copyright ©  2015-2022 西南游戏网版权所有  备案号:皖ICP备2022009963号-8   联系邮箱:39 60 29 14 2@qq.com