TensorFlow自定义神经网络模型输入尺寸指定规则及可变输入支持咨询
输入尺寸的指定逻辑
你贴出的代码里没有显式定义输入尺寸,这是TensorFlow Keras和PyTorch默认机制的核心差异之一:
- Keras的
tf.keras.layers.Dense层默认支持延迟初始化,不需要在定义层的时候提前声明输入特征维度,和PyTorch的LazyLinear行为一致。第一层全连接层的权重会在你第一次给模型传入真实输入张量的时候,自动根据输入张量的最后一维大小创建匹配的参数。 - 如果你想要显式指定输入尺寸,有两种常用方式:
- 在第一层Dense的参数里添加
input_shape配置,比如输入特征维度为20的话,写成tf.keras.layers.Dense(89, activation, input_shape=(20,)) - 在模型实例化后手动调用build方法触发初始化:
model.build(input_shape=(None, 20)),其中None对应可变的batch维度。
- 在第一层Dense的参数里添加
可变尺寸输入的支持情况
这个模型是否支持可变输入取决于你说的“可变尺寸”指的是哪个维度:
- 输入的最后一维(特征维度)必须固定:首次前向传入的输入特征维度会被绑定为模型的固定输入维度,后续再传入特征维度不一致的输入会直接报错,这点和PyTorch的普通全连接层逻辑完全一致。
- 除最后一维外的其他所有维度都是可变的:比如你可以先后传入shape为
(8, 20)、(16, 20)、(4, 10, 20)的输入,只要最后一维是20都可以正常运算,全连接层会自动把前面的维度都当作批量维度处理。
另外你代码里的apply_layers只是依次调用列表中所有层的工具函数,不会影响上述逻辑。
内容的提问来源于stack exchange,提问作者James Arten
相关产品推荐
相关产品推荐

