上节课讲解了单层输出感知机的求导原理和过程,本节讲解多输出感知机的求导和使用。
首先简单复习一下单层输出感知机的求导公式:
式子表示Wj0表示第j号链接节点到输出0点的输出与(O0 - t)*O0*(1-O0)的权值和输入值Xj0有关。
本节将该公式推广到具有全连接层的公式。
具有多层输出的感知机如图所示:
图中公式上的符号与单层感知机不同的是,
由此开始计算
下面以具体代码示例:
import torch
import torch.nn.functional as F
x = torch.randn(1, 10)
w = torch.randn(2, 10, requires_grad=True)
# 由于要实现多输出,w取多个值
o = torch.sigmoid(x@w.t())
# 这里进行了[1, 10]*[2, 10]T => [1, 10]*[10, 2] => [1, 2]
print(o.shape)
# 先输出一下o的shape,验证结果
输出为
torch.Size([1, 2])
下面创造一个[1, 2]的矩阵进行MSE计算
loss = F.mse_loss(torch.ones([1, 2]), o)
# 进行了o矩阵h和全为1的[1, 2]矩阵MSE计算
print(loss)
输出为
tensor(0.4827, grad_fn=<MeanBackward0>)
返回梯度信息
loss.backward()
print(w.grad)
输出为
tensor([[-0.0245, 0.0539, 0.0551, 0.0064, 0.0155, 0.0184, -0.0586, 0.0099,
0.0106, 0.0225],
[-0.0313, 0.0688, 0.0704, 0.0082, 0.0198, 0.0235, -0.0748, 0.0126,
0.0135, 0.0287]])
本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!