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
相关产品推荐
相关产品推荐

