首页/文章/ 详情

预备知识1-数据操作学习笔记

21小时前浏览3
数据的两种基本操作:(1) 数据获取;(2) 将数据读入计算机后对其进行处理。
张量(tensor):N维数组。在MXNet中为ndarray,在PyTorch和TensorFlow中为Tensor,都与numpy中的ndarray相似。但深度学习框架比Numpyndarray多一些重要功能:(1) GPU很好地支持加速计算,而NumPy仅支持CPU计算;(2) 张量类支持自动微分。 

一、入门

torch的基本操作

二、运算符

对于任意具有相同形状的张量,常见的标准算术运算符(+、 -、 *、 /**)都可以被升级为按元素运算。
多个张量连结(concatenate
张量的逻辑运算
元素求和

三、广播机制

形状不同,通过调用广播机制(broadcasting mechanis m)来执行按元素操作,工作机制如下:
1. 通过适当复 制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状
2. 对生成的数组执行按元素操作。
大多数情况下,我们将沿着数组中长度为1的轴进行广播

四、索引和切片 

五、节省内存 

运行一些操作可能会导致为新结果分配内存。例如,如果我们用Y=X+Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量
返回值为False,说明以上操作导致Y内存地址进行重新分配。这是不可取的,原因有两个:
1. 首先,我们不想总是不必要地分配内存。在机器学习中,可能有数百兆的参数,且在一秒内多次更新所有参数。通常情况下,我们希望原地执行这些更新;
2. 若不原地更新,其他引用仍指向旧的内存地址而出现错误。

六、转换为其他Python对象

torch张量和numpy数组将共享它们的底层内存就地操作更改一个张量也会同时更改另一个张量。


来源:檐苔
pythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-08-26
最近编辑:21小时前
青瓦松
硕士 签名征集中
获赞 14粉丝 1文章 45课程 0
点赞
收藏
作者推荐

线性神经网络2-线性回归的从零开始实现

import randomimport torch# 1. 生成数据集def syntheticData(w:torch.Tensor, b:float, numExaples:int)->tuple[torch.Tensor]: ''' 生成y=Xw+b+噪声 ''' X:torch.Tensor = torch.normal(0, 1, (numExaples, len(w))) y:torch.Tensor = torch.matmul(X, w) + b y += torch.normal(0, 0.01, y.shape) # 添加噪声数据 return X, y.reshape((-1, 1))trueW:torch.Tensor = torch.tensor([2.0, -3.4])trueB:float = 4.2features, labels = syntheticData(trueW, trueB, 1000)# 2. 读取数据集def dataIter(batchSize:int, features:torch.Tensor, labels:torch.Tensor): numExamples:int = len(features) indices:list[int] = list(range(numExamples)) # 样本随机读取无特定的顺序 random.shuffle(indices) for idx in range(0, numExamples, batchSize): batchIndices:torch.Tensor = torch.tensor( indices[idx:min(idx+batchSize, numExamples)]) yield features[batchIndices], labels[batchIndices]# 3. 初始化模型参数initW:torch.Tensor = torch.normal(0.0, 0.01, size=(2, 1), requires_grad=True)initB:torch.Tensor = torch.zeros(1, requires_grad=True)# 4. 定义模型def linearRegModel(X:torch.Tensor, w:torch.Tensor, b:torch.Tensor)->torch.Tensor: ''' 线性回归模型 ''' return torch.matmul(X, w) + b# 5. 定义损失函数def squaredLoss(PreY:torch.Tensor, TrueY:torch.Tensor)->torch.Tensor: ''' 均方损失函数 ''' return (PreY-TrueY.reshape(PreY.shape))**2/2.0# 6. 定义优化算法def SGD(params:list[torch.Tensor], lr: float, batchSize:int): ''' 小批量随机梯度下降法 params: 模型参数集 合 lr: 学习率,确定每一步更新的大小 batchSize: 批量样本大小 ''' with torch.no_grad(): for param in params: param -= lr*param.grad/batchSize param.grad.zero_()# 7. 训练lr:float = 0.03 # 学习率numEporchs:int = 3 # 循环次数batchSize: int = 10 # 小批量样本数net = linearRegModelloss = squaredLossfor epoch in range(numEporchs): for X, y in dataIter(batchSize, features, labels): # a. 计算损失 l = loss(net(X, initW, initB), y) # X和y的小批量损失 # b. 反向传播求导 # 因为l形状是(batchSize, 1),而不是一个标量。l中的所有元素被加到一起, # 并以此计算关于[w,b]的梯度 l.sum().backward() # c. 更新参数 SGD([initW,initB], lr, batchSize) # 使用参数的梯度更新参数 # 每一次循环后计算全局损失的平均值 with torch.no_grad(): train_l = loss(net(features, initW, initB), labels) print(f'epoch {epoch+1}, loss {float(train_l.mean()):f}')# 完成模型训练后显示训练参数和真实参数间的误差print(f'w的估计误差: {trueW - initW.reshape(trueW.shape)}')print(f'b的估计误差: {trueB - initB}')来源:檐苔

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈