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

torch.nn.functional.linear原理及代码行23、24、29疑问解析

torch.nn.functional.linear原理及自动驾驶AI代码解析

一、torch.nn.functional.linear的工作原理

torch.nn.functional.linear是PyTorch中实现线性变换的核心函数,计算公式为:
y = x @ weight.T + bias
其中:

  • x是输入张量,通常形状为(batch_size, input_features),代表待处理的原始特征
  • weight是可学习的权重矩阵,形状为(output_features, input_features),用于建立输入与输出特征的线性关联
  • bias是可选的可学习偏置向量,形状为(output_features),用于调整输出的基准值

它是全连接层(nn.Linear类)的底层计算逻辑,nn.Linear本质上封装了权重、偏置的初始化流程,并调用该函数完成线性变换。

二、代码行解读(对应提供的自动驾驶AI代码)

先明确代码行号对应关系:

  • 第23行:self.fc1 = nn.Linear(input_size , 30)
  • 第24行:self.fc2 = nn.Linear(30 , nb_action)
  • 第29行:x = fn.relu(self.fc1(state))

1. 第23、24行:定义全连接层结构

  • 第23行:创建第一个全连接层fc1,负责将输入层(维度input_size对应自动驾驶场景的当前环境状态维度,比如传感器数据、车速、方向盘角度、障碍物距离等)的原始特征,映射到包含30个神经元的隐藏层。30是人工设定的隐藏层神经元数量,用于提取更抽象的中间特征。
  • 第24行:创建第二个全连接层fc2,负责将隐藏层的30维特征,映射到输出层(维度nb_action对应自动驾驶可执行的动作数量,比如左转、直行、右转等),最终输出每个动作的Q值(强化学习中用于评估动作的预期收益)。

2. 第29行:核心疑问解答

  • 为何fc1需要接收state作为输入?
    state是自动驾驶AI感知到的当前环境状态,是整个神经网络的输入数据源。全连接层fc1的作用是对原始状态数据进行第一步特征提取——把分散的原始状态信号(比如不同传感器的数值)整合为更具代表性的中间特征,这是神经网络学习状态与动作关系的基础。

  • 为何fc1的输出作为后续输入?
    神经网络的特征提取是分层递进的:fc1输出的是经过线性变换的中间特征,再经过fn.relu激活函数引入非线性后,得到的是更抽象、更能捕捉状态关键信息的高级特征。将这些特征传给fc2,能让输出层基于提炼后的特征,更精准地计算每个动作的Q值。这种分层处理的方式,能让网络逐步学习到复杂的状态-动作映射规律,是深度神经网络解决复杂任务的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:37:33