pytorch教程龙曲良01-05

01深度学习框架与介绍

pytorch优势
1使用gpu加速


# -*- codeing = utf-8 -*-
# @Time :2021/5/6 20:51
# @Author:sueong
# @File:grad.py
# @Software:PyCharm
import torch
import time
print(torch.__version__)
print(torch.cuda.is_available())

a=torch.randn(10000,1000)#a矩阵
b=torch.randn(1000,2000)
#cpu运算
t0=time.time()
c=torch.matmul(a,b)
t1=time.time()
print(a.device,t1-t0,c.norm(2))
#gpu 搬到cuda
device=torch.device('cuda')
a=a.to(device)
b=b.to(device)

t0=time.time()
c=torch.matmul(a,b)
t2=time.time()
print(a.device,t2-t0,c.norm(2))


#再算一次gpu上的时间 因为第一次gpu 需要cuda初始化
t0=time.time()
c=torch.matmul(a,b)
t2=time.time()
print(a.device,t2-t0,c.norm(2))
1.7.1+cu110
True
cpu 0.4168832302093506 tensor(141016.6719)
cuda:0 4.1152663230896 tensor(141416.5000, device='cuda:0')
cuda:0 0.003988981246948242 tensor(141416.5000, device='cuda:0')
#0.004体现了pytorch使用gpu加速

2自动求导 这样可以实现对loss和w每次更新的求导
在这里插入图片描述

# -*- codeing = utf-8 -*-
# @Time :2021/5/6 21:45
# @Author:sueong
# @File:grad2.py
# @Software:PyCharm
import torch
from torch import autograd

#初始化x=1 a=1 b=2 c=3
x=torch.tensor(1.)
a=torch.tensor(1.,requires_grad=True)#True表示需要计算梯度
b=torch.tensor(2.,requires_grad=True)
c=torch.tensor(3.,requires_grad=True)

#函数
y=a**2*x+b*x+c

print('before:',a.grad,b.grad,c.grad)
grads=autograd.grad(y,[a,b,c])#求y分别对abc的导数
print('after:',grads[0],grads[1],grads[2])

before: None None None
after: tensor(2.) tensor(1.) tensor(1.)

在这里插入图片描述

02开发环境的准备

本课程环境

3.6/3.7
1anaconda安装在这里插入图片描述
安装后

cmd1conda list 2conda --version

看是否安装成功
2安装cuda
在这里插入图片描述
cuda官网在这里插入图片描述在这里插入图片描述

在这里插入图片描述

安装后cmd

nvcc -V

检查cuda是否安装成功
如果显示nvcc不存在此命令 配置环境
在这里插入图片描述

3pytorch的安装
在这里插入图片描述
官网
在这里插入图片描述
管理员身份cmd 复制安装命令
在这里插入图片描述

03线性回归-1

在这里插入图片描述
x’=x-grad(x)
每次x’都是x减去对x的梯度(就是y’在x的结果) 每次将x’迭代求得取到最小值得X*,但是每次x’=x-lrgrad(x) ,lr是学习率,缩放倍数,使得迭代的次数增加效果更好,这样会使得梯度慢慢降低,
在这里插入图片描述
当x=5发现grad(x)=0,则x’=x-lr
grad(x)=5 所以x’还是5没变化,但是因为有grad(x)有计算误差所以x会在5附近徘徊
(之后求w和b同理也是利用梯度下降不断找到符合最小值的w和b)

如果lr比较大,x’=x-lr*grad(x),就会使得步长比较大 x在最低点附近有大幅度的波动
一般lr设置为0.001,一般比较简单的手写数字数据集是设置的0.01,比较复杂新奇的算法探索不同的learning rate
在这里插入图片描述
如图是不同的求解器,对公式做不同的优化,考虑上一次的前进方向要不要和本次的保持一致,加了各种各样约束就会得到各种不同的梯度下降求解器,导致求解速度更快求解精度更快
最经常用的是adam、sgd、msprop在这里插入图片描述

可以求出精确解的算式是closed form solution
但是求出精确解的很少,实际问题一般是求近似解,证明近似解在经验上可行就已经达到了目的了

在这里插入图片描述
在这里插入图片描述

噪声:均值为0.01,方差为1的高斯分布

loss:求y和y_pre=wx+b之差平方的最小值,我们希望的是真实值y和预测值y_pred接近,这样可以找到精确的w和b

04线性回归2

如图是100含有高斯噪声的样本点,我们希望找到一个模型(直线)使得点尽可能在线上,即loss=(wx+b+ε-y)^2 最小
ε
在这里插入图片描述
可视化可以发现w=1,b=0的时候loss比较小,
但实际问题很难可视化,在这里插入图片描述
初始化w=0,b=0,每一处对w和b进行求导,更新100次左右可以发现所求的wheb比较渡河理论值在这里插入图片描述
linear regression:预测的值y是个连续的值取值范围(负无穷,正无穷)或者是某个连续的实数空间也可以
已知xi和yi ,求xn的yn,yn是连续的就成为linear regression
在这里插入图片描述
logistics regression在linear regression增加压缩函数(sigmod function),使得y的取值从实数范围(负无穷,正无穷)变成[0,1],可以变成概率,适合二分类或分类问题。

05线性回归实战

在这里插入图片描述
loss对w,b的偏导如图,之后不断更新w和b可以套两个公式
loss对w的偏导=2(wx+b-y)*x
loss对b的偏导=2(wx+b-y)*1
在这里插入图片描述在这里插入图片描述

# -*- codeing = utf-8 -*-
# @Time :2021/5/8 20:13
# @Author:sueong
# @File:example.py
# @Software:PyCharm
import numpy as np
#y=wx+b

#计算loss
def loss(b,w,points):
    totalloss=0
    for i in range(0,len(points)):
        x=points[i,0]
        y=points[i,1]
        totalloss+=(y-(w*x+b))**2
    return totalloss/float(len(points))


#loss对w的偏导=2(wx+b-y)*x
#loss对b的偏导=2(wx+b-y)*1
#w'=w-lr*loss对w的偏导
#b'=b-lr*loss对b的偏导
#计算b和w b和w不断求偏导取得使loss最小的值
# 其中loss对b和w的偏导,会对每个样本的偏导求和再求均值
#一轮的loss对w和b的偏导,
def step_gradient(b_current,w_current,points,lr):
    b_gradient=0
    w_gradient=0
    N=float(len(points))
    #loss对b,w初始化为0
    for i in range(0,len(points)):
        x=points[i,0]
        y=points[i,1]
        b_gradient+=-(2/N)*(y-(w_current*x+b_current))
        w_gradient += -(2 / N) * x*(y - (w_current * x + b_current))
    new_b=b_current-lr*b_gradient
    new_w=w_current-lr*w_gradient
    return [new_b,new_w]

#循环gradient,迭代次数
def gradient_descent_runner(points,staring_b,staring_w,lr,num_iteration):
    b=staring_b
    w=staring_w
    for i in range(num_iteration):
        b,w=step_gradient(b,w,np.array(points),lr)
    return [b,w]

#主函数
def run():
    #load dataset
    points=np.genfromtxt('data.csv',delimiter=',')#,分隔数据
    lr=0.0001
    initial_b=0#initial y-intercept guess
    initial_w=0#initial slope guess
    num_iterations=1000
    print('Staring gradient descent at b={0},w={1},error={2}'
          .format(initial_b,initial_w,loss(initial_b,initial_w,points)))
    print('Runing...')
    #跑100个epoch
    [b,w]=gradient_descent_runner(points,initial_b,initial_w,lr,num_iterations)
    print('After {0} iteration b={1},w={2},error={3}'
          .format(num_iterations,b,w,loss(b,w,points)))

if __name__=='__main__':
    run()
Staring gradient descent at b=0,w=0,error=5565.107834483211
Runing...
After 1000 iteration b=0.08893651993741346,w=1.4777440851894448,error=112.61481011613473
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。该项目旨在使用PyTorch框架构建一个能够对具有多个标签的数据样本进行分类的模型。 PyTorch是一个流行的深度学习框架,能够实现多种深度学习模型的构建与训练。它提供了丰富的工具和函数,简化了模型的复杂性,并提供了高效的计算能力。 在这个项目中,multi-label指的是数据样本可以被分为多个标签。与传统的单标签分类不同,每个样本可以被分为多个类别,这增加了分类问题的复杂性。模型需要学习如何给每个样本分配正确的标签。 pytorch-multi-label-classifier-master项目提供了一个设置多标签分类模型的基础架构。它包含了数据预处理、模型构建、训练和评估等步骤。用户可以根据自己的数据集和需求,对该项目进行定制。 通过使用pytorch-multi-label-classifier-master项目,用户可以快速搭建一个多标签分类器,用于解决具有多个标签的数据分类问题。同时,该项目还提供了一些示例数据和模型,帮助用户更好地理解和使用多标签分类技术。 总而言之,pytorch-multi-label-classifier-master是一个基于PyTorch框架用于多标签分类的项目,为用户提供了一个简单且灵活的搭建多标签分类器的框架,方便用户解决多标签分类问题。 ### 回答2: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。它提供了一种使用神经网络模型来处理多标签分类任务的解决方案。 该项目的主要目标是通过深度学习技术来提高多标签分类问题的准确度。它使用PyTorch作为深度学习框架,该框架提供了丰富的工具和功能来构建和训练神经网络模型。 在pytorch-multi-label-classifier-master中,你可以找到许多工具和函数来进行数据预处理、模型构建、训练和评估。它支持常见的多标签分类算法,如卷积神经网络(CNN)和递归神经网络(RNN)。你可以根据自己的需求选择合适的模型,并通过简单的配置来进行训练。 该项目还提供了一些示例数据集和预训练模型,以帮助你更快地开始。你可以使用这些数据集来测试和调试你的模型,或者使用预训练模型来进行迁移学习。 pytorch-multi-label-classifier-master还支持一些常见的性能评估指标,如准确率、精确率、召回率和F1值。你可以使用这些指标来评估你的模型在多标签分类任务上的性能。 总的来说,pytorch-multi-label-classifier-master是一个方便易用的项目,旨在帮助你构建和训练用于多标签分类的深度学习模型。它提供了丰富的功能和工具,使你能够快速搭建一个准确度较高的多标签分类器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值