栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用tensor与自动求导编写并训练一个线性回归器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用tensor与自动求导编写并训练一个线性回归器

import torch
import numpy as np
import torch.optim as optim
print(torch.__version__)
#生成训练数据

x = torch.rand(30,2)*10 - 5 
w0 = torch.tensor([2,-1],dtype = torch.float32)
b0 = torch.tensor([1.7],dtype = torch.float32)
y = torch.matmul(x,w0) + b0 + torch.randn(30) #受随机噪声污染的y
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
xarr = x.numpy()
yarr = y.numpy()
fig = plt.figure(0, figsize=(4, 3))
plt.clf()
ax = Axes3D(fig, elev=45, azim=100)
ax.scatter(x[:, 0], x[:, 1], y)
plt.show()

 

 

#编写模型并训练
def linearReg(x, w, b):
    y = torch.matmul(x, w) + b
    return y
def lossfn(y, y_hat):
    e=(y-y_hat)**2
    loss=e.mean()
    return loss

def train_modle(x, y, w, b, epochs, lr=0.1):
    optimizer = optim.SGD([w,b], lr=lr)
    for epoch in range(1, 1+epochs):

        optimizer.zero_grad()
        y_pred = linearReg(x, w, b)
        loss = lossfn(y_pred, y)
        loss.backward()
        optimizer.step()
        print('EP0CH=%d,LOSS=%f,b=%f'%(epoch,loss.detach().numpy(),b.detach().numpy()),w)
        continue
    return w,b

w = torch.tensor([0.0,0.0], requires_grad=True)
b = torch.tensor([0.0],requires_grad=True)
w, b = train_modle(x, y, w, b, epochs=20, lr=0.1)

 训练过程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号