You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Keras中全连接层与卷积层权重布局的疑问

关于Keras中Dense层权重与卷积层核形状的疑问解答

Dense层权重形状为什么是(input_shape, output_shape)?

Keras中Dense层的输入默认是(batch_size, input_dim)的2D张量,执行全连接运算时,实际是做输入矩阵 × 权重矩阵的矩阵乘法:

  • 输入矩阵维度:(batch_size, input_dim)
  • 权重矩阵维度:(input_dim, output_dim)
  • 计算结果维度:(batch_size, output_dim),正好对应每个样本的输出特征长度。

如果权重是(output_dim, input_dim),就得对输入或权重做转置才能得到正确维度,Keras的设计是让运算更直接,避免额外转置操作。另外,权重矩阵的每一列对应一个输出神经元的权重向量,参数更新时按列提取每个输出神经元的参数,逻辑也更清晰。

卷积层核形状为什么是(*kernel_size, num_channels, num_filters)?

这主要和Keras默认的channels_last数据格式有关:

  1. 维度一致性:Keras默认输入张量形状是(batch_size, height, width, num_channels),卷积后输出形状是(batch_size, output_height, output_width, num_filters),把num_filters放最后一维,能保持整个数据流的维度顺序统一,不用额外调整通道位置。
  2. 运算效率优化:Keras默认后端是TensorFlow,而TensorFlow的卷积运算针对channels_last格式做了深度GPU优化,这种维度排列能最大化利用硬件并行计算能力。
  3. 卷积逻辑匹配:每个卷积核本质是(*kernel_size, num_channels)的张量,用来和输入局部特征做互相关运算,将多个核放在最后一维,能直接通过广播机制完成所有滤波器的卷积计算,无需拆分维度。

你提到的把num_filters放第一轴的格式(比如(num_filters, *kernel_size, num_channels)),是PyTorch等框架默认的channels_first格式,两种格式各有优劣,但Keras选择channels_last是为了和TensorFlow生态对齐,同时保证输入输出的维度连贯性。

内容的提问来源于stack exchange,提问作者Fed_Dragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:19:59