首页 > 其他 > 详细

深度学习05-pytorch 实现梯度下降

时间:2021-05-08 16:19:53      阅读:22      评论:0      收藏:0      [点我收藏+]

前几天实现了梯度下降,今天尝试使用pytorch 实现梯度下降,话不多说,上代码!还是使用之前的简单一元线性回归数据集。

import torch
import pandas as pd

# 从文件读取数据
df = pd.read_csv(filepath_or_buffer=‘archive/train.csv‘)

# 给一个随机值 5.0
w = torch.Tensor([25.0])
l = torch.Tensor([0.0])
# 计算梯度
w.requires_grad = True


def forward(x):
    return x * w


def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2



# epoch表示执行轮数,学习100轮
for epoch in range(100):
    for x, y in zip(df[‘x‘], df[‘y‘]):
        l = loss(x, y)
        # 反向传播,反馈,执行后删除计算图
        l.backward()
        # 更新w,grad也是tensor变量,所以使用data取出值
        w.data = w.data - 0.001 * w.grad.data / len(df)
        # 将梯度手动清零,否则会叠加
        w.grad.data.zero_()
    # w是tensor量,所以计算出的l也是tensor量,使用item()取出具体的数值
    print("progress:", epoch, l.item(), ‘ w:‘, w.item())
print(‘train w = ‘, w.item())



df = pd.read_csv(filepath_or_buffer=‘archive/test.csv‘)
for x, y in zip(df[‘x‘], df[‘y‘]):
    l += loss(x, y) / len(df)
print("test loss = ", l.item())

在执行backward() 之后会删除计算图,对于pytorch 的计算图机制很多老师都已经分析了很多了,对于我个人还没有理解透,所以在此先不做详细说明。

其次是对于tensor,个人理解是在类中嵌套另一个类,使用C 语言结构体来表示的话就是:

struct tensor{
	int data;
	tensor grad;
}

同时对于tensor 之间的计算符也被重载了。

这两天做的主要就是pytorch 的学习,但是对其中的机制没什么特别有感觉的,可能往后学了之后就会有点自己的感悟了吧。

深度学习05-pytorch 实现梯度下降

原文:https://www.cnblogs.com/RabbitKeeper/p/14744975.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!