极简pytorch-单层神经网络正向传播

首先我们来看下单层神经网络的结构

由于业内共识输入层不算层数,所以这是一个单层的神经网络

整张图对应的数学公式如下,我们知道不管是机器学习还是深度学习,主要的功能是做预测,比如我们要预测房价,有一组数据,是面积90平,房间数3,只要让90*w1+3*w2 +b就能做预测了,b是偏置,可以不要。如果让w1为100,w2为200,b为0则预测出房价为9600,我们先不管机器预测的准不准,至少它预测出来了,那为啥要用下面一堆恐怖的线性代数来表示这么简单的算法呢,主要是机器做预测都是成百上千组数据,用线性代数可以很直白的表示这种批量操作。

 下面我们用代码来实现预测,通过实例化torch.nn.Linear来实现一个单层的神经网络,torch.nn.Linear的作用就是上面我说的输入数据,然后预测数据,你只需要告诉它输入的特征是几维的,输出的预测值是几维的,比如刚刚说的输入值有面积和房间数,则输入的纬度是2,预测的是房价,则输出的维度是1,如果你想预测房价和房龄,则输出维度是2,它会随机生成权重和偏置,然后给它数据就能返回预测值

import torch

torch.random.manual_seed(420) #人为设置随机数种子
X = torch.tensor([[100,3],[90,4]], dtype = torch.float32) #定义特征矩阵,两个特征,2组数据
#单层神经网络,由于训练数据有两个特征,所以2个输入,预测值为单个数据,1个输出
output = torch.nn.Linear(2,1)
print(output.weight)  #随机生成权重w和截距b,Linear(2,1,bias=False)则不会生成b
print(output.bias)
zhat = output(X) #zhat为预测值

 可以看到打印出来的权重是[0.4318,-0.4256],偏置是0.6730,预测出来的值是[42.5797,37,8357],

以上整个过程叫做神经网络的正向传播,你可能会说这预测的完全不靠谱吧,就是瞎猜的吧?没错,它还真是瞎猜的,后面我会讲到反向传播,到时你会见证预测值和真实值越来越接近,而这种模型通过学习数据,不断拟合旧数据从而能够预测新数据的过程,就叫做机器学习。

PyTorch中的卷积神经网络(CNN)的反向传播是通过计算梯度来更新网络参数的过程。在PyTorch中,可以使用自动求导机制来自动计算梯度。下面是一个简单的示例代码,展示了如何在PyTorch中实现CNN的反向传播: ```python import torch import torch.nn as nn # 定义一个简单的卷积神经网络 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU() self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc = nn.Linear(16 * 14 * 14, 10) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.pool(x) x = torch.flatten(x, 1) x = self.fc(x) return x # 创建网络实例 net = Net() # 定义损失函数 criterion = nn.CrossEntropyLoss() # 定义优化器 optimizer = torch.optim.SGD(net.parameters(), lr=0.001) # 前向传播和反向传播 inputs = torch.randn(1, 1, 28, 28) # 输入数据 labels = torch.tensor([0]) # 标签 # 清零梯度 optimizer.zero_grad() # 前向传播 outputs = net(inputs) # 计算损失 loss = criterion(outputs, labels) # 反向传播 loss.backward() # 更新参数 optimizer.step() ``` 在上述代码中,我们首先定义了一个简单的卷积神经网络`Net`,然后创建了网络实例`net`。然后我们定义了损失函数和优化器(这里使用了交叉熵损失和随机梯度下降优化器)。接下来,我们通过前向传播计算网络输出,并计算损失。然后,我们调用`backward()`方法执行反向传播,自动计算网络参数的梯度。最后,我们调用`optimizer.step()`方法来更新网络参数。 这就是PyTorch中卷积神经网络的反向传播过程。希望对你有帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值