pytorch基本运算-torch.normal()函数生成的随机数据添加噪声

【1】引言

前序学习进程中,已经学习了https://blog.csdn.net/weixin_44855046/article/details/148383432?spm=1001.2014.3001.5502,掌握了一些基本运算方法。

此外也学习了使用PyTorch模块的normal()函数绘制正态分布函数图,掌握了torch.normal()函数生成正态分布随机数的基本技巧。

今天的学习任务就是将两种计算方法结合起来,顺路学习一个强大的新函数torch.matmul()。

【2】矩阵运算

前序学习已经知道:

  • hadamard积是元素对位相乘,用"*"连接张量
  • 点积是元素对位相乘后再求和,用"torch.sum(*)"连接张量,
  • 矩阵乘法是第一个矩阵的第i行与第二个矩阵第j列相乘的效果,用"torch.mm()"连接矩阵,就是大家所熟悉的线性代数中得矩阵乘法,
  • torch.normal()函数生成正态分布随机数。

然后我们尝试写一段代码:

python 复制代码
# 引入模块
import matplotlib.pyplot as plt
import torch
from matplotlib.pyplot import subplots
from sympy.abc import alpha

# 定义随机数数量
n_features=3000
# 生成随机数
w=torch.tensor([1,2]).float()
print(len(w))
x=torch.normal(0,1,(n_features,len(w)))
n=torch.normal(0,0.01,(n_features,))

这段代码的作用是,生成一不同的随机数,这里取len(w)有一个小细节:

当w是1行多列的数据形式时,len(w)=列数;当w是多行多列的数据形式时,len(w)=行数。

此时就会输出不同维度数的x,n是最为常规的正态分布随机数,可以理解为一个行向量。

然后展开计算:

python 复制代码
# 随机数计算
c=2*x
d=torch.matmul(x,w)+n
print('d=',d)

这里使用了torch.matmul(x,w)函数,之所以说torch.matmul(x,w)函数很强大,是因为这个函数可以自动根据x和w的维度自行选择计算方法:

如果两个二维张量满足常规矩阵计算方法的维度,它们就会按照常规矩阵乘法的计算法则计算;

如果两个二维张量不满足常规矩阵计算方法的维度,它们会先自动广播,然后按照常规矩阵乘法的计算法则计算;

如果两个一维张量相乘,它们会按照元素对位相乘后叠加,类似于"torch.sum(*);

其他的暂时不学,用到了再说,总之就是很灵活。

这里定义的x张量的列数和w的行数相等,每行数据是x1,x2,所以会按照每行数据x1w1+x2w2+n的方式计算。

然后输出图像就可以:

python 复制代码
# 绘制综合效果
fig,ax=subplots(3,1)
ax[0].scatter(x[:,(0)],d.flatten())
ax[1].hist(d.flatten(),bins=50,color='blue',alpha=0.5)
ax[2].plot(x[:,(1)],d.flatten(),color='blue',alpha=0.5)
plt.grid(True)
plt.show()

代码运行效果为:

此时的完整代码为:

python 复制代码
# 引入模块
import matplotlib.pyplot as plt
import torch
from matplotlib.pyplot import subplots
from sympy.abc import alpha

# 定义随机数数量
n_features=3000
# 生成随机数
w=torch.tensor([1,2]).float()
print(len(w))
x=torch.normal(0,1,(n_features,len(w)))
n=torch.normal(0,0.01,(n_features,))

# 随机数计算
c=2*x
d=torch.matmul(x,w)+n
print('d=',d)

# 绘制综合效果
fig,ax=subplots(3,1)
ax[0].scatter(x[:,(0)],d.flatten())
ax[1].hist(d.flatten(),bins=50,color='blue',alpha=0.5)
ax[2].plot(x[:,(1)],d.flatten(),color='blue',alpha=0.5)
plt.grid(True)
plt.show()

【3】总结

学习了torch.normal()函数生成的随机数据,再对随机数据使用torch.matmul(x,w)函数进行张量计算和添加噪声的基本操作。

相关推荐
fthux5 小时前
装闭 RenoPit 源码解析(09):AnalysisEngine装修闭坑分析主流程
人工智能·ai·开源·github·open source·renopit
敏编程5 小时前
开源项目 NextBand:探索融合健康传感、语音交互与 AI Agent 的下一代可穿戴设备
人工智能
ovO6 小时前
我按下“发送”之后:DeepSeek Harness 如何把一次请求变成 1,177 个增量片段
人工智能·开源·deepseek
2603_965148116 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
昨日之日20066 小时前
LTX-2.5:更清晰、更可控、同步音画、多镜头连贯的AI视频神器
人工智能·音视频
九硕智慧建筑一体化厂家6 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
江厌016 小时前
本地部署DeepSeek显卡怎么选?我把显存计算公式和实测记录写下来了
人工智能·百度·联想工作站·代理商推荐·渠道对比·工作站
小席是个热心肠6 小时前
AI相关的自我学习
java·人工智能·学习
FII工业富联科技服务7 小时前
工业AI自治的演进趋势:从内容生成到Agent驱动的工厂运营范式转变
人工智能
程序猿编码7 小时前
不用GPU,不用多线程,我用C++20手写了一个Gemma 3推理引擎
pytorch·语言模型·大模型·c++20·推荐算法