pytorch学习1

2023-09-20 15:21:09

前言

在这里插入图片描述
王者之争
在这里插入图片描述
核心之争在于动态图优先还是静态图优先
pytorch是动态计算生成新变量
tf是先定义变量,再生成

回归问题

1、梯度下降算法了解

[梯度算法是深度学习的核心,deep learning求解复杂问题主要靠的是梯度下降算法,故deep learning 近似等于 gradient programing.]

在这里插入图片描述
类似于高中所学的求导问题,求解loss的极小值,loss也可以看作我们熟悉的y,求y的倒数,再检验这个导数是否是我们要求解的极大值/极小值;梯度下降算法不同的是,它有迭代计算的过程。

在这里插入图片描述
迭代得到新的x`等于x减去导数,以x轴坐标2.5为例:
在这里插入图片描述

在x=2.5点处,假设算得导数为-0.9,此时设定学习率即lr为0.005,则:
x`= 2.5 - (-0.9 * lr)

对于lr大小的设置,若lr设置的比较小,就会进行多次迭代,如上图中多的红点即为迭代记录
在这里插入图片描述
最终在x=5位置处导数为0,新的x`= 5 - 0.005 * 0,故得到的结果还是5。
当然,在实际计算中不一定正好达到5的位置,最终结果会接近于5。

在梯度下降计算中还有多种计算器的选择(如下),旨在增加一定的约束条件从而达到更好的计算结果,本质计算过程还是不变。
在这里插入图片描述
其中,最常用的是sgd、rmsprop还有图上没提到的adam。

2、简单回归问题

二元一次方程如下:
在这里插入图片描述
对于初中数学消元法来说,有(1,1.567)和(2,3.043)两组数据代入方程,由式2减去式1,w等于1.477,b约等于0.089。

上述能够精确求解的情况叫作Closed Form Solition。但实际上能够被精确求解的问题并不多,很多数据存在一定的偏差,实际问题往往都是求得一个近似解,在经验上被证明可行即为近似最优解。

在这里插入图片描述
实际数据会存在客观或人为的噪声误差,我们不可能只取两三组数据就求得一个准确的解,这时需要通过若干组数据去求得一个更平均的近似解。

这里并不是要得到y的最小值,而是要求得w和b,使w * x + b最接近于y,则此时梯度下降计算式可列为:
loss = (w * x + b - y)** 2
loss >= 0 ,求解loss的最小值即求得y近似等于w * x + b时,w和b的取值。

在这里插入图片描述
在已知w和b的取值,且有高斯噪声的情况下,x取[0,15],生成100个数据点。

我们假设并不知道各参数值,只通过观察这一百组数据点,判断他们符合线性分布,现在求解w和b的参数,使得求得直线与各点整体的误差最小:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先将w,b都初始化为0, 在每个点处对w和b求导,随着w,b的更新,最终近似解会接近理论值。

实战
在这里插入图片描述
在这里插入图片描述
其中,b`的计算跟w同理。loss将w和b分布当作自变量进行求导。
在这里插入图片描述
循环迭代在这里插入图片描述
上代码:
先生成数据
再定义各计算函数
最终运行程序出结果

import numpy as np
import random
x = np.random.randint(low=5, high=15, size=100)
y = 1.47 * x + 0.089 + np.random.rand()
points = np.stack((x,y),1)
learningRate = 0.001
num = 10000
start_w = 0
start_b = 0


def compute_error_for_line_given_points(w, b, points):
    totalError = 0
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        totalError += ((w * x + b) - y) ** 2
    return totalError / float(len(points))

def step_gradient(w_current, b_current, points, learningRate):
    w_gradient = 0
    b_gradient = 0
    N = float(len(points))
    for i in range(len(points)):
        x = points[i, 0]
        y = points[i, 1]
        w_gradient += 2/N * x * (w_current * x + b_current - y)
        b_gradient += 2/N * (w_current * x + b_current - y)
    w_current -= learningRate * w_gradient
    b_current -= learningRate * b_gradient
    return w_current, b_current

def gradient_descent_runner(points, starting_w, starting_b, learningRate, num):
    w = starting_w
    b = starting_b
    for i in range(num):
        w, b = step_gradient(w, b, points, learningRate)
    return w, b

if __name__ == '__main__':
    print('starting gradient descent at w = {0}, b = {1}, error = {2}'.format(
        start_w, start_b, compute_error_for_line_given_points(start_w, start_b, points))
    )

    print("Running...")

    w, b = gradient_descent_runner(points, start_w, start_b, learningRate, num)
    print("After {0} iterations, w = {1}, b = {2}, error = {3}".format(
        num, w, b, compute_error_for_line_given_points(w, b, points))

结果:
D:\Anaconda\envs\ai_clone\python.exe D:/pyproject/torch/csdn1.py

starting gradient descent at w = 0, b = 0, error = 250.55349960186973
Running...
After 10000 iterations, w = 1.4856465608314946, b = 0.7776575796016487, error = 0.00216977834414222

Process finished with exit code 0
更多推荐

51单片机光照强度检测自动路灯开关仿真( proteus仿真+程序+报告+讲解视频)

51单片机光照强度检测自动路灯开关仿真(proteus仿真+程序+报告+讲解视频)仿真图proteus7.8及以上程序编译器:keil4/keil5编程语言:C语言设计编号:S0052讲解视频基于51单片机的光照检测自动路灯控制仿真设计(proteus仿真+程序+报告+讲解视频)1.主要功能:基于51单片机的万年历时钟

web安全漏洞-SQL注入攻击实验

实验目的学习sql显注的漏洞判断原理掌握sqlmap工具的使用分析SQL注入漏洞的成因实验工具sqlmap是用python写的开源的测试框架,支持MySQL,Oracle,PostgreSQL,MicrosoftSQLServer,MicrosoftAccess,IBMDB2,SQLite,Firebird,Sybas

web系统安全设计原则

一、前言近日,针对西工大网络被攻击,国家计算机病毒应急处理中心和360公司对一款名为“二次约会”的间谍软件进行了技术分析。分析报告显示,该软件是美国国家安全局(NSA)开发的网络间谍武器。当下,我们发现对于我们发布到互联网的软件和系统的安全审查越来越严格。因为web系统天生的伴随着很多漏洞的产生,这是就给很多不法分子留

kubernetes核心概念 Service

kubernetes核心概念Service一、service作用使用kubernetes集群运行工作负载时,由于Pod经常处于用后即焚状态,Pod经常被重新生成,因此Pod对应的IP地址也会经常变化,导致无法直接访问Pod提供的服务,Kubernetes中使用了Service来解决这一问题,即在Pod前面使用Servi

B+树的定义以及查找

1.B+树的定义一棵m阶的B+树需满足下列条件:每个分支结点最多有m棵子树(孩子结点)。非叶根结点至少有两棵子树,其他每个分支结点至少有「m/2]棵子树。结点的子树个数与关键字个数相等。所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来(支持顺序查找)。所

【Linux成长史】Linux基本指令大全

🎬博客主页:博主链接🎥本文由Mmalloc原创,首发于CSDN🙉🎄学习专栏推荐:LeetCode刷题集数据库专栏初阶数据结构🏅欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📆未来很长,值得我们全力奔赴更美好的生活✨文章目录😇本章详情😇Linux指令⏳more指令⏳less指令(重要)⏳head指令⏳时间相

NumPy数值计算

1、Numpy概念1.1Numpy是什么?Numpy是(NumericalPython的缩写):一个开源的Python科学计算库使用NumPy可以方便的使数组、矩阵进行计算包含线性代数、傅里叶变换、随机数生成等大量函数1.2为什么使用Numpy对于同样的数值计算任务,使用NumPy比直接编写Python代码实现,优点:

React小项目-在线计算器(下)

CONTENTS1.Django项目初始化2.登录/注册后端功能实现3.登录/注册前端界面设计4.登录前后界面的转换5.将React与Django结合并部署至云端本文为React项目(在线计算器)的下篇内容,主要为后端部分的开发,上篇可见:React小项目-在线计算器(上)。1.Django项目初始化我们先在项目根目录

使用Selenium和Python自动预订车票

在本文中,我们将探讨如何使用Selenium和Python自动预订车票。我们将以12306.cn网站为例,演示自动化预订车票的过程。通过阅读本文,您将更好地了解如何使用Selenium与网页进行交互。准备工作首先,我们需要安装Selenium库。您可以使用以下命令在您的Python环境中安装Selenium:shell

基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证

目录1.算法运行效果图预览2.算法运行软件版本3.部分核心程序4.算法理论概述5.算法完整程序工程1.算法运行效果图预览将gamma=2.2和gamma=1/2.2的数据分别导入到matlab进行对比:2.算法运行软件版本matlab2022a3.部分核心程序`timescale1ns/1ps////Company:/

公共4G广播音柱有哪些用处

公共广播音柱有哪些用处公共广播音柱是一种用于广播音频信号的设备,一般安装在公共场所或街道上。它具有以下几个主要用处:1.喊话广播:公共广播音柱可以用于喊话广播,用来传达重要信息、紧急通知、警报等,如公共安全提示、灾害警报、紧急疏散指示等。2.音乐播放:公共广播音柱可以通过播放音乐来为公共场所创造愉悦的氛围,如在公园、广

热文推荐