各位朋友你们好,我在B站学习刘二大人的深度学习课程时,在第五讲中说损失函数必须为标量才可以进行反向传播,但是在第四讲中讲反向传播时的例子中的损失函数l我运行了一下并不是标量,而是一个一维的张量,那他为什么还能调用backward函数进行反向传播呢?非常感谢各位进行解答
在第四讲中的例子中,损失函数 l 确实不是一个标量,而是一个一维的张量。但是,这个张量是可以进行反向传播的,因为反向传播并不是要求损失函数必须为标量,而是要求损失函数必须与神经网络的输出张量具有相同形状的张量。
在第四讲中的例子中,虽然损失函数 l 是一维的张量,但是它的形状与神经网络的输出张量的形状是相同的,都是一维的向量。因此,这个损失函数可以与神经网络的输出张量进行求和操作,从而得到一个标量,这个标量就是我们需要的损失函数的值。
在第五讲中,刘二大人强调的是损失函数必须为标量,这是因为在实际应用中,我们通常使用的是多分类问题或回归问题,这些问题的损失函数通常是标量。如果损失函数不是标量,我们需要使用一些特殊的计算方法来计算反向传播的梯度,这些方法比较复杂,也不太常用。因此,刘二大人为了简化深度学习的计算过程,才提出了损失函数必须为标量的要求。
def set_parameter_requires_grad(model, feature_extracting):
if feature_extracting:
for param in model.parameters():
param.requires_grad = False