0
点赞
收藏
分享

微信扫一扫

pytorch 学习第【1】天

booksmg2014 2022-03-11 阅读 75

目录

1. Pytorch安装:

可以参考之前的文章:Win10 下安装 CUDA Toolkit
简单检查下:
代码:

import torch
print(torch.__version__) #版本
print(torch.cuda.is_available())   #GPU是否可用

结果:

1.10.2
True

2. 梯度下降算法(Gradient Descent)

2.1 梯度下降的原理:

梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法。对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的。梯度下降算法背后的原理:目标函数 [公式] 关于参数 [公式] 的梯度将是损失函数(loss function)上升最快的方向。而我们要最小化loss,只需要将参数沿着梯度相反的方向前进一个步长,就可以实现目标函数(loss function)的下降。
具体可以一文看懂常用的梯度下降算法

2.2 梯度下降运用例子:

假设: 我们有数据集合X,Y ,并且Y与X的关系满足:
在这里插入图片描述
我们的目标就就是:求W,b 并且使得loss 最小
在这里插入图片描述
运用梯度下降的方法:
先求梯度:
在这里插入图片描述
得到新的w’ 与b‘ 然后进行迭代,根据当前的w,b,lr 代入运算

2.3 python代码实现:

首先有数据集合:data.csv,其中包括了X,Y的数值.

compute_error_for_line_given_points 函数计算loss:

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

step_gradient 函数计算新的w’ 与b’

def step_gradient(b_current, w_current, points, learningRate):
    b_gradient = 0
    w_gradient = 0
    N = float(len(points))
    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 - (learningRate * b_gradient)
    new_w = w_current - (learningRate * w_gradient)
    return [new_b, new_w]

gradient_descent_runner 迭代的次数与w,b的的更新

run 运行函数:

def run():
    points = np.genfromtxt("data.csv", delimiter=",")
    learning_rate = 0.0001
    initial_b = 0 # initial y-intercept guess
    initial_m = 0 # initial slope guess
    num_iterations = 1000
    print("Starting gradient descent at b = {0}, m = {1}, error = {2}"
          .format(initial_b, initial_m,
                  compute_error_for_line_given_points(initial_b, initial_m, points))
          )
    print("Running...")
    [b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)
    print("After {0} iterations b = {1}, m = {2}, error = {3}".
          format(num_iterations, b, m,
                 compute_error_for_line_given_points(b, m, points))
          )

主函数main:

if __name__ == '__main__':
    run()

2.4. 运行结果

Starting gradient descent at b = 0, m = 0, error = 5565.107834483211
Running...
After 1000 iterations b = 0.08893651993741346, m = 1.4777440851894448, error = 112.61481011613473

3. 代码整合:

无需积分:代码与数据

举报

相关推荐

0 条评论