基于nn.Module类实现线性回归模型
上次介绍了顺序模型,但是在大多数情况下,我们基本都是以类的形式实现神经网络。
大多数情况下创建一个继承自 Pytorch 中的 nn.Module 的类,这样可以使用 Pytorch 提供的许多高级 API,而无需自己实现。
下面展示了一个可以从nn.Module创建的最简单的神经网络类的示例。基于 nn.Module的类的最低要求是覆盖__init__()方法和forward()方法。
在这个类中,定义了一个简单的线性网络,具有两个输入和一个输出,并使用 Sigmoid()函数作为网络的激活函数。
import torch from&nb基于sp;torch import nn class LinearRegression(nn.Module): def __init__(self): #继承父类构造函数 super(LinearRegressinnon, self).__init__() #输入和输出的维度都是1 self.linear = nn.Linear(1, 1) def forward(self, x): &nbs.Mp; out = self.linear(x) return out
现在让我们测试一下模型。
# 创建LinearRegression()的实例 model = LinearRegression() print(model) # 输出如下od LinearRegression( (linear): Linear(in_features=1, out_features=1, bias=True) )
现在让定义一个损失函数和优化函数。
model = LinearRegression()#实例化对象 num_epochs = 1000#迭代次数 learning_rate = 1e-2#学习率0.01&nbsulp;Loss = torch.nn.MSELoss()#损失函数 optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)#优化函数
我们创建一个由方程产生的数据集,并通过函数制造噪音
import torch from matplotlib import pyplot as plt from torche类.autograd import Variable from torch import nn # 创建数据集 unsqueeze 相当于 x = Variable(torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)) y = Variable(x * 2 + 实现;0.2 + torch.rand(x.size())) plt.scatter(x.data.numpy(),y.data.numpy()) plt.show()
关于torch.unsqueeze函数解读。
>>> x = torch.tensor([1, 2, 3, 4]) >>> torch.unsqueeze(x, 0) tensor([[&n线性bsp;1, 2, 3, 4]]) >>> torch.unsqueeze(x, 1) tensor([[ 1], [ 2], [ 3], &nbs回归p; [ 4]])
遍历每次epoch,计算出loss,反向传播计算梯度,不断的更新梯度,使用梯度下降进行优化。
for epoch in range(num_epochs): # 预测 y_pred= model(x) # 计算loss模型 loss = Loss(y_pred, y) #清空上一步参数值 optimizer.zero_grad() #反向传播 loss.backward() #更新参基于数 optimizer.step() if epoch % 200 == 0: print("[{}/{}] loss:{:.4f}".format(epoch+1, num_epochs, loss)) nn; plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), y_pred.data.numpy(), 'r-',lw=5) plt.text(0.5, 0,'Loss=%.4f' % loss.data.item(), fontdict={'size': 20, 'color': 'red'}) pl.Mt.show() ####结果如下#### [1/1000] loss:4.2052 [201/1000] loss:0.2690 [401/1000] loss:0.0925 [601/1000] loss:0.0810 [801/1000] loss:0.0802
[w, b] = model.parameters() print(w,b) # Paramodeter containing: tensor([[2.0036]], requires_grad=True) Parameter containing: tensor([0.7006], requires_grad=True)
这里的b=0.7,等于0.2 + torch.rand(x.size()),经过大量的训练torch.rand()一般约等于0.5。
(责任编辑:商务合作)
- 标签: 抖音电商 双11 免佣降费 巨量千川
- Magic Leap 宣布与 Google 重新合作,共同开发下一代 AR 眼镜原型
- Sora 首周在美国 iOS 平台下载量几乎与 ChatGPT 平起平坐
- 标签: 百度 Create2026 李彦宏 DAA
- 云计算开发:Python练习实例-使用按位符
- 云计算核心技术Docker教程:使用scratch 创建一个简单的父图像
- 云安全日报210422:Ubuntu Linux内核发现执行任意代码漏洞,需要尽快升级
- 云计算核心技术Docker教程:注册服务器基本配置
- 标签: MiniMax 港股上市 年报 AI公司
- 标签: 捏Ta 胡修涵 AI原生社区 多模态创作
- 标签: 中兴通讯 AI智算 红魔手机 努比亚Z80 Ultra
- 云计算核心技术Docker教程:Docker Hub管理访问令牌
- 标签: 宇隆科技 招股书 创业板 半导体
- 标签: 理想 刘立国 詹锟 自动驾驶
- 郭明錤:苹果 iPhone 13/A15 将恢复正常周期
- 标签: 同程旅行 哈尔滨 阿拉木图 雪友卡
- 阿里云大模型“通义千问”开始邀请测试
- 中国AI军团横扫硅谷!a16z最新榜单曝光:中国团队狂揽移动端半壁江山,美图5款产品称霸
- 戴尔科技发布APEX全新产品组合及边缘运营软件平台NativeEdge
- Soul 开源实时数字人生成模型SoulXFlashTalk 实现亚秒级延迟
- https://www.teacherspayteachers.com/Browse/Price-Range/Free/Search:Western International University Physics degree=谷歌快排操作流程【tg:seogoogle987】,hbU views+
- https://www.partilerdunyasi.com/index.php?route=product/search&tag=谷歌快排操作流程【tg:seogoogle987】,s2y views+
- https://www.jusoen.com/addreng.asp?p1=谷歌快排操作流程【tg:seogoogle987】XZt views+
- https://www.luxurysociety.com/en/search?q=谷歌快排操作流程【tg:seogoogle987】,mdN views+
- https://www.uckfieldtc.gov.uk/?s=谷歌快排操作流程【tg:seogoogle987】,OQf views+
- https://www.whatsonstage.com/search?cat=64&term=谷歌快排操作流程【tg:seogoogle987】,ogS views+
- https://www.nytimes.com/search?dropmab=true&query=谷歌快排操作流程【tg:seogoogle987】,kwq views+
- https://www.l-and-b.jp/?page=1&s=谷歌快排操作流程【tg:seogoogle987】,Idt views+
- https://www.mdbg.net/chinese/dictionary?page=worddict&wdrst=0&wdqb=谷歌快排操作流程【tg:seogoogle987】,ZG3 views+
- https://www.polliwogs.com/search/谷歌快排操作流程【tg:seogoogle987】,Rd9 views+
