从零实现

import torch
import randomdef synthetic_data(w, b, num_examples):"""生成 y=Xw + b + 噪声"""X = torch.normal(0, 1, (num_examples, len(w))) # 正态分布(均值为0,标准差为1)y = torch.matmul(X, w) + b # 矩阵相乘y += torch.normal(0, 0.01, y.shape) # 加入噪声项# 得到的y为行向量的形式,为了使其变为一列的形式需要进行reshapereturn X, y.reshape((-1, 1))def data_iter(batch_size, features, labels):num_examples = len(features)indices = list(range(num_examples))# 这些样本是随机读出的,没有特定的顺序random.shuffle(indices)for i in range(0, num_examples, batch_size):batch_indices = torch.tensor(indices[i:min(i+batch_size,num_examples)])yield features[batch_indices],labels[batch_indices]def linear(X,w,b):"""定义模型"""return torch.matmul(X,w)+bdef squared_loss(y_hat,y):return (y_hat-y.reshape(y_hat.shape))**2/2def sgd(params, lr, batch_size):"""小批量梯度下降"""with torch.no_grad():for param in params:  # 参数b和wparam -= lr*param.grad/batch_sizeparam.grad.zero_()if __name__ == '__main__':true_w = torch.tensor([2, -3.4])true_b = 4.2features, labels = synthetic_data(true_w,true_b,1000) # 生成数据集# 初始化模型参数w = torch.normal(0,0.01,(2,1),requires_grad=True)b = torch.zeros(1,requires_grad=True)# 定义超参数lr = 0.03num_epochs = 3batch_size = 15net = linearloss = squared_lossfor epoch in range(num_epochs):for X, y in data_iter(batch_size,features,labels):y_hat = linear(X,w,b)loss = squared_loss(y_hat,y)loss.sum().backward() # 进行反向传播得到梯度sgd((w,b),lr,batch_size)with torch.no_grad():train_l = squared_loss(net(features,w,b),labels)# print(train_l)print(f'epoch{epoch+1},loss{float(train_l.mean()):f}')"""
output:
epoch1,loss0.362755
epoch2,loss0.008698
epoch3,loss0.000259
"""

简洁实现

import torch
from d2l import torch as d2l
from torch.utils import data
from torch import nndef load_array(data_arrays, batch_size, is_train=True):"""构建一个pytorch数据迭代器"""dataset = data.TensorDataset(*data_arrays)return data.DataLoader(dataset, batch_size, shuffle=is_train)if __name__ == '__main__':true_w = torch.tensor([2, -3.4])true_b = 4.2features , labels = d2l.synthetic_data(true_w, true_b, 10000)batch_size = 10# 数据迭代器data_iter = load_array((features,labels),batch_size)print(next(iter(data_iter)))# 定义模型net = nn.Sequential(nn.Linear(2,1))# 初始化模型参数net[0].weight.data.normal_(0,0.01)net[0].bias.data.fill_(0)# 定义损失函数loss = nn.MSELoss()# 定义优化算法trainer = torch.optim.SGD(net.parameters(),0.03)# 模型训练num_epoch = 3for epoch in range(num_epoch):for X,y in data_iter:l = loss(net(X),y)trainer.zero_grad()l.backward()trainer.step() # 优化l = loss(net(features),labels)print(f'epoch{epoch+1},loss{l:f}')print(net[0].weight.data)"""
output:
epoch1,loss0.000099
epoch2,loss0.000100
epoch3,loss0.000099
tensor([[ 1.9998, -3.4005]])
"""

d2l_线性回归完整python程序相关推荐

  1. 含类定义的完整python程序_Python——变量,运算,条件,循环

    Python Python开发 Python语言 Python--变量,运算,条件,循环 注释 1.注释是什么 注释就是给代码做的一些简短的说明,让我们更好的去理解代码,注意程序执行的时候,不会去执行 ...

  2. 含类定义的完整python程序_含是什么意思 带含字的男孩名字 用含字起名的寓意...

    带含字的男孩名字,用含字起名: 含 (hán):含表示容纳.包容.怀有. 繁体:无繁体字; 部首:口,含为上下结构,姓名学笔画7画. 声调:阳平; 部首五行属水; 数理五行属金. 含81数理:(精悍) ...

  3. 含类定义的完整python程序_含是什么意思 带含字的女孩名字 用含字起名的寓意...

    带含字的女孩名字,用含字起名: 含 (hán):含表示容纳.包容.怀有. 繁体:无繁体字; 部首:口,含为上下结构,姓名学笔画7画. 声调:阳平; 部首五行属水; 数理五行属金. 含81数理:(精悍) ...

  4. 含类定义的完整python程序_含是什么意思 含字五行属什么

    含字取名属性及五行属什么: 含字的拼音:han 含的繁体字:含(若无繁体,则显示本字) 含字的起名笔画数:7 含五行属什么:水 含字的取名数理吉凶:吉 含是否为姓氏:否 说明:"含" ...

  5. 含类定义的完整python程序_《含》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...

    基本词义 ◎ 含 hán 〈动〉 (1) (形声.从口,今声.本义:含在嘴里) (2) 同本义 [keep in the mouth] 含,嗛也.--<说文> 含,口也,合口亭之也.衔亦然 ...

  6. d2l_线性回归实现详解及代码

    文章目录 1. 线性回归从零开始实现 1.1 生成数据集 1.2 读取数据集 1.3 初始化模型参数 1.4 定义模型 1.5定义损失函数 1.6 定义优化算法 1.7 训练 2. 线性回归简洁实现 ...

  7. python基本原理概论_优学院《2020年马克思主义基本原理概论题库(高职类)》查题教程2020高校邦《Python程序设计基础【实境编程】》答案完整...

    优学院<2020年马克思主义基本原理概论题库(高职类)>查题教程2020高校邦<Python程序设计基础[实境编程]>答案完整 更多相关问题 专业职业是相对以下哪点而言的(). ...

  8. python程序设计基础第二版pdf下载_Python程序设计基础董付国课后答案-Python程序设计基础第二版清华大学出版社PDF电子版完整高清版-精品下载...

    Python程序设计基础(第2版)完全面向Python 3.x,全部案例代码使用Python 3.5.x和Python 3.6.x编写,大部分内容也同样适用于Python 3.4.x.本书对Pytho ...

  9. python从零基础到项目实战怎么样-2018完整Python零基础到项目精通的学习书籍

    Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏.Python编程语言的流行直线上升,如何学习好Py ...

最新文章

  1. SVO 学习笔记(深度滤波)
  2. 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections
  3. 链表基础概念与经典题目(Leetcode题解-Python语言)
  4. 虚拟机和linux系统整理??
  5. 云原生和ServiceMesh主要组件--理解K8s/Istio/Envoy
  6. matlab 矢量化编程(二)—— 使用 meshgrid
  7. 索引超出矩阵维度怎么修改程序_seo关键词优化工具怎么收费
  8. 微信营销有哪些优缺点?
  9. 无锡科技职业学院院长孙兴洋应邀到美和易思作专题讲座
  10. 电脑开机自动弹出广告如何解决
  11. win10配置系统默认utf-8编码
  12. 妹子图 Spider
  13. 性能进阶:使用JMeter进行websocket测试【建议收藏】
  14. win10系统双屏如何设置不同的桌面
  15. 使用WPS解决英文不占满一行
  16. 一个 IDB 中的多个文件
  17. 人人网2015研发笔试卷C
  18. 一个代码小白的絮絮叨叨
  19. autocad 2014菜单栏没了 怎么调出来 ?
  20. 中国茶饮背后的困局与出路

热门文章

  1. 【Timm】create_model所提供的ViT模型概览
  2. 通过爬取前程无忧网站数据分析上海互联网行业招聘状况
  3. python中数据准备_Python 从入门到精通:一个月就够了!
  4. 打印机竖线不直_七夕小子_新浪博客
  5. libreOffice构建docker镜像
  6. 一文带你熟透Java线程池的使用及源码
  7. oracle青蛙软件下载,青蛙·app
  8. 联动添加redmine的wik
  9. 计算机二级使用宏,【二级Office】Word控件、宏功能的简单运用
  10. 30分钟快速了解Axure