基于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(LinearRegressionnn, self).__init__() #输入和输出的维度都是1 self.linear = nn.Linear(1, 1) def forward(self, x): .M 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 ul;Loss = torch.nn.MSELoss()#损失函数 optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)#优化函数
我们创建一个由方程产生的数据集,并通过函数制造噪音
import torch from matplotlib import pyplot as plt from tore类ch.autograd import Variable from torch import nn # 创建数据集 unsqueeze 相当于 x = Variable(torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)) y = Variable(x * 2 +&实现nbsp;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([线性[ 1, 2, 3, 4]]) >>> torch.unsqueeze(x, 1) tensor([[ 1], [ 2], [ 3],  回归; [ 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))&nbnnsp; 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'})&nb.Msp;plt.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) # Paodrameter 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。
- ·除了缺点创意,GPT-3写出了及格大学毕业论文,只需20分钟
- ·PyTorch、TensorFlow最新版本对比,2021年了你选谁?
- ·标签: 京东工业 刘强东 港交所 上市
- ·面壁智能推出 VoxCPM:新一代高拟真语音生成模型
- ·参与国家“东数西算”工程,中国电信:将继续加大国家枢纽节点数据中心建设
- ·硬核!一文学完Flink流计算常用算子
- ·LeCun联手博士后arxiv发文,遭reddit网友质疑:第一张图就错了
- ·标签: 腾讯元宝 AI拜年图片 低俗输出 模型异常
- ·斯坦福研究团队发布 AgentFlow:为模块化、工具使用的 AI 代理提供新一代强化学习框架
- ·标签: 旭化成 Aizip 毫米波雷达 肌电手势 CES2026
- ·云计算核心技术Docker教程:Docker 插件 API
- ·百度发布GenFlow4.0:Office Agent全面升级,月活用户突破1亿
- ·标签: 三瑞智能 无人机动力系统 eVTOL CubeMars
- ·Meta 计划推出超级政治行动委员会,力挺 AI 监管轻松化
- ·吉祥彩
- ·论企业集成平台即服务(EiPaaS)的重要性 译文
- ·https://www.goodreads.com/quotes/tag/谷歌搜索留痕【tg:seogoogle987】0Xc
- ·https://www.pearson.com/en-us/search.html?aq=谷歌搜索留痕【tg:seogoogle987】,LIf
- ·https://blvdseafood.com/?s=谷歌搜索留痕【tg:seogoogle987】Wit
- ·https://www.pacific-lifestyle.co.uk/search?sort=alphabetical&term=谷歌搜索留痕【tg:seogoogle987】,3F5
- ·https://www.yr.no/en/search?q=谷歌搜索留痕【tg:seogoogle987】,Lfj
- ·https://www.laoairlines.com/?action=QUERY&s=谷歌搜索留痕【tg:seogoogle987】,8OH
- ·https://www.navylookout.com/?ID=nSBR6Ivdu6lZg1yr2SDs30Lo5sTs76yJ&s=谷歌搜索留痕【tg:seogoogle987】,Txv
- ·https://www.terramania.nl/catalogsearch/result/index/?q=谷歌搜索留痕【tg:seogoogle987】,dRL
- ·https://www.lyrics.com/lyrics/kkk3谷歌搜索留痕【tg:seogoogle987】,rlp
- ·https://www.ntv.co.jp/3min/search/?action=QUERY&q=谷歌搜索留痕【tg:seogoogle987】,CNl
- ·云计算开发:Python3-upper()方法详解
- ·标签: SpaceX xAI 奇瑞QQ 胡润品牌榜
- ·Gartner:到2029年,用于AI工作负载的云计算资源比例将达到50%
- ·亚马逊CEO贝索斯最后一封年度股东信:还要为员工做得更多
- ·谷歌Gemini能耗大揭秘!单次回答仅耗微波炉一秒电量,AI绿色革命悄然开启
- ·阿里巴巴,24年来最深刻的变革
- ·微软游戏领域再次谋划大并购:100亿美元吞下聊天平台Discord
- ·标签: 爱奇艺 王俊 曾颖
- ·标签: 云知声U2 LLMStatsScore LongBench-V2 ClaudeOpus
- ·标签: 龙芯中科 龙芯CPU 3C6000 工控芯片
