深度学习Note.4(机器学习实践)

线性回归

零.

1.paddle库的一些API

paddle.rand(shape,dtype = None, name = None)

*随机生成符合均匀分布的Tensor

paddle.nromal(mean = 0.0, std = 1.0, shape = None, name = None)

*随机生成符合正态分布的Tensor

*输入正态分布均值,标准差, 生成结果的形状

*输出形状为shape的Tensor

paddle.randint(low = 0, high = None, shape = [1],dtype = 0, name = none)

*在指定范围内生成符合均匀分布的Tensor

*输入范围的上下限。。。

paddle.linspace(start, stop, num, dtype = None, name = None)

*在指定区间生成均匀间隔的是定个值

*输入区间,区间数,输出1-DTensor 

paddle.rann(shape, dtype = None, name = None)

随机生成符合标准正态分布的Tensor 

paddle.zeros(shape, dtype = None, name = None)

生成指定形状的全0 Tensor 

 paddle.full(shape, fill_value, dtype=None,name=None)

创建指定形状元素值均为指定值的Tensor

输入:生成结果的形状,元素值    输出:形状为shape值全为fill_value的Tensor

 paddle.matmul(x, y, transpose_x=False,transpose_y=False, name=None)

功能:计算两个Tensor乘积,遵循广播规则
输入:两个Tensor以及相乘前是否转置
输出:Tensor,矩阵相乘后的结果

 paddle.mean(x, axis=None, keepdim=False,name=None)
功能:沿axis计算输入的平均值
输入:Tensor,计算轴,是否在输出种保留减少的维度
输出:Tensor,沿着axis进行平均值计算的结果

paddle.square(x, name=None)
功能:逐元素取平方
输入:Tensor
输出:返回取平方后的Tensor 

paddle.subtract(x, y, name=None)
功能:逐元素相减
输入:输入2个Tensor
输出:Tensor,运算后的结果

paddle.eye(num_rows, num_columns=None, dtype=None, name=None)
功能:构建二维Tensor(主对角线元素为1,其他元素为0)
输入:行数和列数
输出:Tensor, shape为[num_rows, num_columns]

paddle.inverse(x,name=None)
功能:计算方阵的逆
输入:输入Tensor
输出:输入方阵的逆   

 2.matplotlib库学习

一.数据集构建

import paddle
from matplotlib import pyplot as pltdef linear_func(x, w=1.2, b=0.5):return w * x + bdef create_toy_data(func, interval, sample_num, noise=0.0, add_outlier=False, outlier_ratio=0.01):X = paddle.rand(shape=[sample_num]) * (interval[1] - interval[0]) + interval[0]y = func(X)epsilon = paddle.normal(0, noise, shape=[y.shape[0]])y += epsilonif add_outlier:outlier_num = max(1, int(len(y) * outlier_ratio))outlier_idx = paddle.randint(len(y), shape=[outlier_num])y[outlier_idx] = y[outlier_idx] * 5return X.numpy(), y.numpy()  # 返回 NumPy 数组# 生成数据
func = linear_func
interval = (-10, 10)
train_num = 100
test_num = 50
noise = 2X_train, y_train = create_toy_data(func, interval, train_num, noise, add_outlier=False)
X_test, y_test = create_toy_data(func, interval, test_num, noise, add_outlier=False)# 生成理论分布数据(转换为 NumPy)
X_underlying = paddle.linspace(interval[0], interval[1], train_num).numpy()
y_underlying = linear_func(paddle.to_tensor(X_underlying)).numpy()  # 确保输出为 NumPy# 绘图
plt.figure(figsize=(8, 6))
plt.scatter(X_train, y_train, marker='*', facecolor="none", edgecolor='green', s=50, label="Train Data")
plt.scatter(X_test, y_test, facecolor="none", edgecolor='red', s=50, label="Test Data")
plt.plot(X_underlying, y_underlying, c='#000000', linestyle='--', label="Underlying Distribution")
plt.xlabel("X", fontsize=12)
plt.ylabel("y", fontsize=12)
plt.title("Linear Regression Dataset", fontsize=14)
plt.legend()
plt.grid(True, linestyle=':', alpha=0.5)
plt.savefig('ml-vis.pdf', bbox_inches='tight', dpi=300)
plt.show()

结果;

二.模型构建

                                                                    f(x;w,b)=wTx+b

y=Xw+b

import paddle
from nndl.op import Oppaddle.seed(10) #设置随机种子# 线性算子
class Linear(Op):def __init__(self, input_size):"""输入:- input_size:模型要处理的数据特征向量长度"""self.input_size = input_size# 模型参数self.params = {}self.params['w'] = paddle.randn(shape=[self.input_size,1],dtype='float32') self.params['b'] = paddle.zeros(shape=[1],dtype='float32')def __call__(self, X):return self.forward(X)# 前向函数def forward(self, X):"""输入:- X: tensor, shape=[N,D]注意这里的X矩阵是由N个x向量的转置拼接成的,与原教材行向量表示方式不一致输出:- y_pred: tensor, shape=[N]"""N,D = X.shapeif self.input_size==0:return paddle.full(shape=[N,1], fill_value=self.params['b'])assert D==self.input_size # 输入数据维度合法性验证# 使用paddle.matmul计算两个tensor的乘积y_pred = paddle.matmul(X,self.params['w'])+self.params['b']return y_pred# 注意这里我们为了和后面章节统一,这里的X矩阵是由N个x向量的转置拼接成的,与原教材行向量表示方式不一致
input_size = 3
N = 2
X = paddle.randn(shape=[N, input_size],dtype='float32') # 生成2个维度为3的数据
model = Linear(input_size)
y_pred = model(X)
print("y_pred:",y_pred) #输出结果的个数也是2个

三.损失函数

回归任务是对连续值的预测,希望模型能根据数据的特征输出一个连续值作为预测值。因此回归任务中常用的评估指标是均方误差

import paddledef mean_squared_error(y_true, y_pred):"""输入:- y_true: tensor,样本真实标签- y_pred: tensor, 样本预测标签输出:- error: float,误差值"""assert y_true.shape[0] == y_pred.shape[0]# paddle.square计算输入的平方值# paddle.mean沿 axis 计算 x 的平均值,默认axis是None,则对输入的全部元素计算平均值。error = paddle.mean(paddle.square(y_true - y_pred))return error# 构造一个简单的样例进行测试:[N,1], N=2
y_true= paddle.to_tensor([[-0.2],[4.9]],dtype='float32')
y_pred = paddle.to_tensor([[1.3],[2.5]],dtype='float32')error = mean_squared_error(y_true=y_true, y_pred=y_pred).item()
print("error:",error)

四.模型优化

经验风险最小化,利用偏导数为0求最小

def optimizer_lsm(model, X, y, reg_lambda=0):"""输入:- model: 模型- X: tensor, 特征数据,shape=[N,D]- y: tensor,标签数据,shape=[N]- reg_lambda: float, 正则化系数,默认为0输出:- model: 优化好的模型"""N, D = X.shape# 对输入特征数据所有特征向量求平均x_bar_tran = paddle.mean(X,axis=0).T # 求标签的均值,shape=[1]y_bar = paddle.mean(y)# paddle.subtract通过广播的方式实现矩阵减向量x_sub = paddle.subtract(X,x_bar_tran)# 使用paddle.all判断输入tensor是否全0if paddle.all(x_sub==0):model.params['b'] = y_barmodel.params['w'] = paddle.zeros(shape=[D])return model# paddle.inverse求方阵的逆tmp = paddle.inverse(paddle.matmul(x_sub.T,x_sub)+reg_lambda*paddle.eye(num_rows = (D)))w = paddle.matmul(paddle.matmul(tmp,x_sub.T),(y-y_bar))b = y_bar-paddle.matmul(x_bar_tran,w)model.params['b'] = bmodel.params['w'] = paddle.squeeze(w,axis=-1)return model

五.模型训练

模型的评价指标和损失函数一致,都为均方误差。

通过上文实现的线性回归类来拟合训练数据,并输出模型在训练集上的损失。

input_size = 1
model = Linear(input_size)
model = optimizer_lsm(model,X_train.reshape([-1,1]),y_train.reshape([-1,1]))
print("w_pred:",model.params['w'].item(), "b_pred: ", model.params['b'].item())y_train_pred = model(X_train.reshape([-1,1])).squeeze()
train_error = mean_squared_error(y_true=y_train, y_pred=y_train_pred).item()
print("train error: ",train_error)

model_large = Linear(input_size)
model_large = optimizer_lsm(model_large,X_train_large.reshape([-1,1]),y_train_large.reshape([-1,1]))
print("w_pred large:",model_large.params['w'].item(), "b_pred large: ", model_large.params['b'].item())y_train_pred_large = model_large(X_train_large.reshape([-1,1])).squeeze()
train_error_large = mean_squared_error(y_true=y_train_large, y_pred=y_train_pred_large).item()
print("train error large: ",train_error_large)

六.模型评估

用训练好的模型预测一下测试集的标签,并计算在测试集上的损失。

y_test_pred = model(X_test.reshape([-1,1])).squeeze()
test_error = mean_squared_error(y_true=y_test, y_pred=y_test_pred).item()
print("test error: ",test_error)
y_test_pred_large = model_large(X_test.reshape([-1,1])).squeeze()
test_error_large = mean_squared_error(y_true=y_test, y_pred=y_test_pred_large).item()
print("test error large: ",test_error_large)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5学习笔记 FPS游戏制作29 更换武器时更换武器的图标

文章目录 制作物体图标UI添加获取武器图标的方法使用事件分发器,通知UI要换枪定义事件分发器调用事件分发器注册事件分发器 制作物体图标UI 在Fpp-UI上添加一个图片,改名为五weaponIcon,勾选SizeToContent,锚点放在右下角,对齐改…

RCE(自增、取反、异或)

自增: 也就是说,a > b,b > c... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符。 无字母数字构造: 所有敏感字符串(ASSERT、_POST)通过自增动态生…

从架构角度谈谈云原生架构

1、云原生架构起源 随着云服务商的成熟,客户面临着将服务直接使用云平台的服务部署在云平台上,或者采用本地和云上混合部署的模式来对外提供服务,从解决方案的角度来说,采用云原生架构的优点有: 可以利用云服务的管理…

Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)

——国产工具链的崛起与智能汽车测试新范式 引言:新能源汽车测试的国产化突围 随着新能源汽车智能化、网联化程度的提升,研发测试面临三大核心挑战:多协议融合(CAN FD/LIN/以太网)、高实时性数据交互需求、复杂工况下…

【Verilog】实验十 带倒计时交通灯控制电路设计

目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理与实验步骤 1. 实验原理 2. 实验步骤 五、实验思考 代码 TOP.v trafic2_2.v shumaguan.v clk_div.v 一、实验目的 1. 掌握同步有限状态机的设计方法。 2. 采用状态机的设计方法,设计实现带倒…

Linux : System V 共享内存

目录 一 前言 二 共享内存概念 三 共享内存创建 四 查看共享内存 五 共享内存的删除 六 共享内存的关联 七 共享内存去关联 八 共享内存的使用(通信) 九 共享内存的特点 一 前言 共享内存区是最快的IPC形式(进程间通信&#xff1…

Spring Cloud 2023.x安全升级:OAuth2.1与JWT动态轮换实战

引言:当安全遇上云原生,零停机密钥轮换成为刚需 在微服务架构中,OAuth2.1与JWT已成为身份验证的黄金标准,但传统方案存在两大痛点: 密钥轮换风险:手动替换JWT密钥需重启服务,导致短暂鉴权中断&…

创建私人阿里云docker镜像仓库

一.登录阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances 二.创建个人实例 【实例列表】 》【创建个人实例】 》【设置Registry登录密码】 三.创建命名空间 步骤:【个人实例】》【命名空间】》【创建命名空间】 注:一个账号最多可以创建3个命名空…

oracle基础知识视图的定义和应用

1.1 视图的定义 视图(View)是数据库中非常重要的内容,在实际开发中必须学会视图的编写。 用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。视图是可以嵌套的。 视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中…

边缘计算:工业自动化的智能新引擎

在工业4.0的浪潮中,工业自动化正经历着前所未有的变革。随着物联网(IoT)技术的普及,越来越多的工业设备被连接到网络中,产生了海量的数据。然而,传统的云计算架构在处理这些实时性要求极高的工业数据时&…

12-SpringBoot3入门-项目打包和运行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot应用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源

产品概述 PCIE711-214是一款基于PCIE总线架构的4路SDI视频模拟源。该板卡为标准的PCIE插卡&#xff0c;全高尺寸&#xff0c;适合与PCIE总线的工控机或者服务器&#xff0c;板载协议处理器&#xff0c;可以通过PCIE总线将上位机的YUV 422格式视频数据下发通过SDI接口播放出去&…

PipeWire 音频设计与实现分析一——介绍

PipeWire 是一个基于图的媒体处理引擎&#xff0c;一个可以运行多媒体节点图的媒体服务器&#xff0c;是 Linux 的音频/视频总线&#xff0c;它管理 Linux 系统中&#xff0c;不同应用程序对音频和视频设备的共享访问。它提供了一个本地客户端音频 API&#xff0c;但也提供兼容…

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

UR机械臂sim2real推荐包

推荐一个和ur机械臂配套的interface&#xff1a; ur_rtde Universal Robots RTDE C Interface — ur_rtde 1.6.0 documentation 也欢迎大家提供新想法和bug

CST学习笔记(三)MATLAB与CST联合仿真-远场数据批量导出

CST学习笔记&#xff08;三&#xff09;MATLAB与CST联合仿真-远场数据批量导出 一、直接数据导出 &#xff08;1&#xff09;打开远场&#xff0c;调至笛卡尔坐标系 &#xff08;2&#xff09;然后点击post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

蓝桥杯---BFS解决FloofFill算法1---图像渲染

文章目录 1.算法简介2.题目概述3.算法原理4.代码分析 1.算法简介 这个算法是关于我们的floodfill的相关的问题&#xff0c;这个算法其实从名字就可以看出来&#xff1a;洪水灌溉&#xff0c;其实这个算法的过程就和他的名字非常相似&#xff0c;下面的这个图就生动的展示了这个…

我与数学建模之启程

下面的时间线就是从我的大二上开始 9月开学就迎来了本科阶段最重要的数学建模竞赛——国赛&#xff0c;这个比赛一般是在9月的第二周开始。 2021年国赛是我第一次参加国赛&#xff0c;在报名前我还在纠结队友&#xff0c;后来经学长推荐找了另外两个学长。其实第一次国赛没啥…

利用 SSRF 和 Redis 未授权访问进行内网渗透

目录 环境搭建 ​编辑 发现内网存活主机 ​编辑 扫描内网端口 ​编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步骤 2&#xff1a;写入 Webshell&#xf…