【动手学深度学习Pytorch】1. 线性回归代码
零实现
导入所需要的包:
# %matplotlib inline
import random
import torch
from d2l import torch as d2l
import matplotlib.pyplot as plt
import matplotlib
import os
构造人造数据集:假设w=[2, -3.4],b=4.2,存在随机噪音(均值为0,方差为0.001的正态分布噪声),函数拟合为。在构造数据集的过程中,首先X为正态分布(均值为0,方差为1,样本数/行数为num_examples,列数为len(w))
torch.normal(mean, std, *, generator=None, out=None):生成指定输出尺寸的正态分布随机数张量
torch.mv():矩阵和向量的乘积,此处X为矩阵,w为向量
def synthetic_data(w, b, num_examples):X = torch.normal(0, 1, (num_examples, len(w))) #均值为0方差为1的随机数,样本数,列数y = torch.mv(X, w) + b #y关于x的公式y += torch.normal(0, 0.001, y.shape) # 加入噪声项return X, y.reshape((-1,1)) #做成列向量返回
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
查看数据集样本分布:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs):
x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 'o'。
cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
vmin,vmax:亮度设置,在 norm 参数存在时会忽略。
alpha:透明度设置,0-1 之间,默认 None,即不透明。
linewidths:标记点的长度。
edgecolors:颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。
plotnonfinite:布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs:其他参数。
detach():允许我们从计算图中分离出张量。当对一个张量调用detach()方法时,它会创建一个新的张量,这个新张量与原始张量共享数据,但它不再参与计算图的任何操作,对分离后的张量进行的任何操作都不会影响原始张量,也不会在计算图中留下任何痕迹。
plt.scatter(features[:,(1)].detach().numpy(),labels.detach().numpy(),1);
plt.show()

遍历数据集,输出数据集内容:
len(): 返回对象(字符、列表、元组等)长度或项目个数(此处是张量的行数)
list(): 将元组转换为列表
range():创建一个整数列表
shuffle(): 随机打乱列表
def data_iter(batch_size, features, labels):num_examples = len(features)indices = list(range(num_examples)) #生成样本索引random.shuffle(indices) #样本随机读取没有特定顺序# 进行batch划分for i in range(0, num_examples, batch_size): #从i开始到i+batchsizebatch_indices = torch.tensor(indices[i:min(i + batch_size, num_examples)])# 截取切片:开始位置为i,结束位置为min函数的返回值# 返回值为i+batch_size和num_examples的值比较小的那个yield features[batch_indices], labels[batch_indices] #产生随机顺序的特征&标号batch_size = 10for X, y in data_iter(batch_size, features, labels):print(X, '\n', y)break
定义参数、模型、损失函数以及优化算法:
torch.mutual():矩阵相乘
with torch.no_grad():所有计算得出的tensor的requires_grad都自动设置为False,不会进行自动求导
grad.zero_():将梯度置零(不然会发生累计的情况)
# 定义初始化模型参数
w = torch.normal(0, 0.01, size=(2,1), requires_grad=True)
b = torch.zeros(1, requires_grad=True)
# 定义模型
def linreg(X, w, b):return torch.matmul(X, w) + b
# 定义损失函数
def squared_loss(y_hat, y):return (y_hat - y.reshape(y_hat.shape))**2/2
# 定义优化算法
def sgd(params, lr, batch_size):with torch.no_grad():for param in params:param -= lr * param.grad / batch_sizeparam.grad.zero_()
定义训练过程:
# 训练过程
lr = 0.01
num_epochs = 10
net = linreg
loss = squared_lossfor epoch in range(num_epochs):for X, y in data_iter(batch_size, features, labels):l = loss(net(X, w, b), y)l.sum().backward()sgd([w,b], lr, batch_size)with torch.no_grad():train_1= loss(net(features, w, b), labels)print(f'epoch{epoch + 1}, loss{float(train_1.mean()):f}')

简介实现
导入所需要的包:
import numpy as np
import torch
from torch.utils import data
from d2l import torch as d2l
import matplotlib.pyplot as plt
创建人造数据集:
data.TensorDataset():将数据进行封装
data.DataLoader():将数据分批次处理
iter():获取列表的迭代器
next():获取下一个值
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = d2l.synthetic_data(true_w, true_b,1000)
def load_array(data_arrays, batch_size, is_train=True):dataset = data.TensorDataset(*data_arrays)return data.DataLoader(dataset, batch_size, shuffle=is_train)batch_size = 10
data_iter = load_array((features, labels), batch_size)next(iter(data_iter))
初始化模型、模型参数、loss:
nn.Sequential():实现模型层结构的简单排序
torch.optim.SGD():定义优化算法
torch.optim.SGD().step():进行模型的更新
# 使用框架的预定义好的层
from torch import nn
net = nn.Sequential(nn.Linear(2,1))
# 初始化模型参数
net[0].weight.data.normal_(0, 0.01)
net[0].bias.data.fill_(0)
# 计算均方误差使用的是MSELoss类
loss = nn.MSELoss()
trainer = torch.optim.SGD(net.parameters(),lr=0.01)
定义训练过程:
num_epochs = 3
for epoch in range(num_epochs):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{1:f}')相关文章:
【动手学深度学习Pytorch】1. 线性回归代码
零实现 导入所需要的包: # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集:假设w[2, -3.4],b4.2,存在随机噪音&…...
深入理解PyTorch中的卷积层:工作原理、参数解析与实际应用示例
深入理解PyTorch中的卷积层:工作原理、参数解析与实际应用示例 在PyTorch中,卷积层是构建卷积神经网络(CNNs)的基本单元,广泛用于处理图像和视频中的特征提取任务。通过卷积操作,网络可以有效地学习输入数…...
DataGear 5.2.0 发布,数据可视化分析平台
DataGear 企业版 1.3.0 已发布,欢迎体验! http://datagear.tech/pro/ DataGear 5.2.0 发布,图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强,具体更新内容如下: 重构:各模块管理功能访问路径…...
uniapp: vite配置rollup-plugin-visualizer进行小程序依赖可视化分析减少vender.js大小
一、前言 在之前文章《uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)》中,提到了6种优化小程序包体积的方法,但并没有涉及如何分析common/vender.js这个文件的优化,而这个文件的大小通常情况下…...
深度学习:如何复现神经网络
深度学习:如何复现神经网络 要复现图中展示的卷积神经网络(CNN),我们需详细了解和配置每层网络的功能与设计理由。以下将具体解释各层的配置以及设计选择的原因,确保网络设计的合理性与有效性。 详细的网络层配置与设…...
Spring Boot与MyBatis-Plus的高效集成
Spring Boot与MyBatis-Plus的高效集成 引言 在现代 Java 开发中,MyBatis-Plus 作为 MyBatis 的增强工具,以其简化 CRUD 操作和无需编写 XML 映射文件的特点,受到了开发者的青睐。本篇文章将带你一步步整合 Spring Boot 与 MyBatis-Plus&…...
【Unity ShaderGraph实现流体效果之Function入门】
Unity ShaderGraph实现流体效果之Node入门(一) 前言Shader Graph NodePosition NodeSplit NodeSubtract NodeBranch Node 总结 前言 Unity 提供的Shader Graph在很大程度上简化了开发者对于编写Shader的工作,只需要拖拽即可完成一个视觉效果…...
Spark RDD sortBy算子执行时进行数据 “采样”是什么意思?
一、sortBy 和 RangePartitioner sortBy 在 Spark 中会在执行排序时采用 rangePartitioner 进行分区,这会影响数据的分区方式,并且这一步骤是通过对数据进行 “采样” 来计算分区的范围。不过,重要的是,sortBy 本身仍然是一个 tr…...
React-useRef与DOM操作
#题引:我认为跟着官方文档学习不会走歪路 ref使用 组件重新渲染时,react组件函数里的代码会重新执行,返回新的JSX,当你希望组件“记住”某些信息,但又不想让这些信息触发新的渲染时,你可以使用ref&#x…...
Mistral AI 发布 Pixtral Large 模型:多模态时代的开源先锋
Mistral AI 最新推出的 Pixtral Large 模型,带来了更强的多模态能力。作为一款开源的多模态模型,它不仅在参数量上达到 1240 亿,更在文本和图像理解上实现了质的飞跃。 模型亮点 1. 多模态能力再升级 Pixtral Large 配备了 123B 参数的解码器…...
Windows、Linux多系统共享蓝牙设备
Windows、Linux多系统共享蓝牙设备 近来遇到一个新问题,就是双系统共享蓝牙鼠标。因为一直喜欢在Windows、Linux双系统之间来回切换,而每次切换系统蓝牙就必须重新配对,当然,通过网络成功解决了问题。 通过这个问题,稍…...
C语言 | Leetcode C语言题解之第564题寻找最近的回文数
题目: 题解: #define MAX_STR_LEN 32 typedef unsigned long long ULL;void reverseStr(char * str) {int n strlen(str);for (int l 0, r n-1; l < r; l, r--) {char c str[l];str[l] str[r];str[r] c;} }ULL * getCandidates(const char * n…...
wsl虚拟机中的dockers容器访问不了物理主机
1 首先保证wsl虚拟机能够访问宿主机IP地址,wsl虚拟机通过vEthernet (WSL)的地址访问,着意味着容器也要通过此IP地址访问物理主机。 2 遇到的问题:wsl虚拟机中安装了docker,用在用到docker容器内的开发环境,但是虚拟机…...
Spark RDD 的宽依赖和窄依赖
通俗地理解 Spark RDD 的 宽依赖 和 窄依赖,可以通过以下比喻和解释: 1. 日常生活比喻 假设你在管理多个团队完成工作任务: 窄依赖:每个团队只需要关注自己的分工,完成自己的任务。例如,一个人将纸张折好&…...
二进制转十进制
解题思路分析 二进制转十进制原理:二进制数转换为十进制数的基本原理是按位权展开相加。对于一个二进制数,从右往左每一位的位权依次是将每一位上的数字(0 或 1)乘以其对应的位权,然后把所有结果相加,就得…...
深度学习:神经网络中的非线性激活的使用
深度学习:神经网络中的非线性激活的使用 在神经网络中,非线性激活函数是至关重要的组件,它们使网络能够捕捉和模拟输入数据中的复杂非线性关系。这些激活函数的主要任务是帮助网络解决那些无法通过简单的线性操作(如权重相乘和偏…...
Python缓存:两个简单的方法
缓存是一种用于提高应用程序性能的技术,它通过临时存储程序获得的结果,以便在以后需要时重用它们。 在本文中,我们将学习Python中的不同缓存技术,包括functools模块中的 lru_cache和 cache装饰器。 简单示例:Python缓…...
原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型
无论是在什么手机机型下,自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12,13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意:红色阔里的是自定义导航(或者其他的logo啊,返回之…...
经验笔记:远端仓库和本地仓库之间的连接(以Gitee为例)
经验笔记:远端仓库和本地仓库之间的连接 方法一:先创建远端仓库,再克隆到本地 创建远端仓库 登录到你的Git托管平台(如Gitee、GitHub、GitLab、Bitbucket等)。点击“New Repository”或类似按钮,创建一个新…...
利用RAGflow和LM Studio建立食品法规问答系统
前言 食品企业在管理标准、法规,特别是食品原料、特殊食品法规时,难以通过速查法规得到准确的结果。随着AI技术的发展,互联网上出现很多AI知识库的解决方案。 经过一轮测试,找到问题抓手、打通业务底层逻辑、对齐行业颗粒度、沉…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

