pytorch入门1

我们先来对比一下pytorch之间使用GPU与CPU之间的差距

import torch
import time

print(torch.__version__)           #查看版本
print(torch.cuda.is_available())       #能否运行gpu版本cuda
# print('hello, world.')
a = torch.randn(10000, 1000)
b = torch.randn(1000, 2000)
t0 = time.time()
c = torch.matmul(a, b)   #计算两个张量相乘所需时间
t1 = time.time()
print(a.device, t1 - t0, c.norm(2))       #计算cpu运行时间

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运行的时间

t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))       #计算gpu运行时间

计算两个矩阵的计算所用的时间。我的GPU第一次输出索用的时间比CPU长是因为有加载时间。第二次所用的时间比第一次快了100倍。

梯度与偏导

包autograd用于计算梯度

import  torch
from    torch import autograd

x = torch.tensor(1.)                      #x值赋予1
a = torch.tensor(1., requires_grad=True)  #a的值赋予1,告知要对a求偏导
b = torch.tensor(2., requires_grad=True)  #b的值赋予2,告知要对b求偏导
c = torch.tensor(3., requires_grad=True)  #c的值赋予3,告知要对c求偏导

y = a**2 * x + b * x + c          #y的表达式

print('before:', a.grad, b.grad, c.grad)    #求导前abc的梯度信息
grads = autograd.grad(y, [a, b, c])
print('after :', grads[0], grads[1], grads[2])   #grad[0][1][2]分别表示对abc的偏导

输出:
在这里插入图片描述

用梯度下降更新损失函数与偏置项

简单的案例回归

import numpy as np

# y = wx + b
def compute_error_for_line_given_points(b, w, points): #定义求误差平方和函数
    totalError = 0         #赋予初始值为0 用于计算所有的误差平方和
    for i in range(0, len(points)):  #获得数据集中的第一列为x,第二列为y
        x = points[i, 0]
        y = points[i, 1]
        totalError += (y - (w * x + b)) ** 2       #求得所有误差平方和之和 公式loss = (y-(w*x+b))^2
    return totalError / float(len(points))       #返回平均后的误差平方和

def step_gradient(b_current, w_current, points, learningRate): #定义计算b与w梯度值
    b_gradient = 0         #初始值0
    w_gradient = 0
    N = float(len(points))     #获取数据总长度
    for i in range(0, len(points)):   #获得第一列给x,第二列给y
        x = points[i, 0]
        y = points[i, 1]
        b_gradient += -(2/N) * (y - ((w_current * x) + b_current))  #计算b对loss偏导后的值,2(((w*x)+b)-y)
        w_gradient += -(2/N) * x * (y - ((w_current * x) + b_current))  #计算w对loss偏导后的值,2x(((w*x)+b)-y)
    new_b = b_current - (learningRate * b_gradient)     #更新b的值
    new_w = w_current - (learningRate * w_gradient)    #更新w的值
    return [new_b, new_w]   #返回更新后的b与w

def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations): #定义循环迭代函数
    b = starting_b   #赋予b初始值
    m = starting_m   #赋予m初始值
    for i in range(num_iterations):    #循环迭代num次
        b, m = step_gradient(b, m, np.array(points), learning_rate)   #开始梯度下降
    return [b, m] #返回迭代完后的b与m

def run():  #定义主代码
    points = np.genfromtxt("data.csv", delimiter=",")    #读取数据,逗号为分隔符
    learning_rate = 0.0001      #学习率为0.0001
    initial_b = 0 # 赋予初始b值
    initial_w = 0 # 赋予初始w值
    num_iterations = 1000     #迭代1000次
    print("Starting gradient descent at b = {0}, w = {1}, error = {2}" #输出起始b,w和误差平方和
          .format(initial_b, initial_w,
                  compute_error_for_line_given_points(initial_b, initial_w, points))
          )
    print("Running...")
    [b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)
    print("After {0} iterations b = {1}, w = {2}, error = {3}".          #输出迭代完后的b,w和误差平方和
          format(num_iterations, b, w,
                 compute_error_for_line_given_points(b, w, points))
          )

if __name__ == '__main__':      #运行代码
    run()
在使用Keil集成开发环境进行ARM微控制器编程时,可能会遇到“找不到编译器 Missing: Compiler Version 5”的错误提示,这通常是由于Keil没有正确配置或安装了不完整的ARM Compiler v5.06导致的。本文将详细介绍如何解决这个问题。 我们需要了解ARM Compiler是什么。ARM Compiler是ARM公司开发的一套编译工具链,它包括了编译器、链接器、汇编器等组件,用于将C/C++源代码转换为适用于ARM架构处理器的目标代码。在Keil中,它用于构建和优化针对ARM芯片的应用程序。 在错误信息中提到的"arm complier v5.06",指的是ARM Compiler的版本号5.06。这个版本可能与你的Keil安装不兼容或者未被正确识别。解决这个问题的步骤如下: 1. **检查安装**:确保你已经安装了ARM Compiler v5.06。通常,这个工具会在安装Keil μVision时一起安装,但如果没有,你需要单独下载并安装。可以从ARM官网或者Keil的官方网站获取相应版本的编译器。 2. **配置Keil路径**:在Keil的安装目录下找到`TOOLS.INI`文件,这是一个配置文件,用于指定编译器的位置。确保其中的路径指向了你安装的ARM Compiler v5.06的目录。 3. **更新项目设置**:在Keil μVision中,打开你的项目,然后选择“Project” > “Options for Target” > “Toolchain”。在“Compiler”选项卡中,确认“Compiler version”已经设置为“v5.06”。如果未自动识别,可以手动输入正确的路径。 4. **环境变量**:有时,即使设置了正确的路径,Keil仍然无法找到编译器,可能是因为系统环境变量未设置好。确保`PATH`环境变量包含了ARM Compiler的bin目录,这样系统在启动Keil时才能找到编译器。 5. **重启Keil**:完成上述设置后,关闭并重新启动Keil μVision,让更改生效。如果问题仍未解决,尝试卸载并重新安装Keil和ARM Compiler。 在提供的文件列表"arm506"中,可能包含了解决这个问题所需的一些资源,如安装程序、补丁或配置文件。如果你已下载这个文件,可以按照以下步骤操作: - 解压缩文件,通常会得到一个包含编译器可执行文件的目录。 - 将这个目录路径添加到Keil的`TOOLS.INI`文件或系统环境变量`PATH`中。 - 如果是补丁文件,按照说明应用到Keil或ARM Compiler的安装目录。 通过以上步骤,大部分情况下都能解决“找不到编译器 Missing: Compiler Version 5”的问题。如果问题依然存在,可能需要检查网络连接,因为某些情况下,Keil需要访问在线许可证服务器。此外,确保你的Keil版本与ARM Compiler版本兼容,不同版本的Keil可能支持不同的ARM Compiler版本。在升级或更新任何组件时,务必查阅官方文档以获取详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值