【动手学深度】线性回归的简介实现

通过使用框架来实现线性模型

import torch
import numpy as np
from torch.utils import data
import sys
sys.path.append("E:\ANaconda\envs\pytroch_env\Lib\site-packages")
from d2l import torch as d2l

true_w=torch.tensor([2,-3.4])
ture_b=4.2

features,lables=d2l.synthetic_data(true_w,true_b,1000)

调用框架中现有的API(接口)来读取数据,每次随机抓取十个数据

def load_array(data_arrays,batch_size,is_train=True):
    '''构造一个pytorch数据迭代器'''
    dataset=data.TensorDataset(*data_arrays)                  #*号可以表示list中的各个数据
    return data.DataLoader(dataset,batch_size,shuffle=is_train)      #每次随机挑选batch_size个样本出来,打乱顺序
batch_size=10
data_iter=load_array((features,lables),batch_size)

next(iter(data_iter))      #next() 返回迭代器的下一个项目。next() 函数要和生成迭代器的 iter() 函数一起使用。

使用框架预定义好的层

from torch import nn    #神经网络的缩写

net=nn.Sequential(nn.Linear(2,1))  #输入维度输出维度  线性层或全连接层    ,Sequential 可以理解为list of layers


#初始化参数权重
net[0].weight.data.normal_(0,0.01)
net[0].bias.data.fill_(0)

使用均方误差和实例SGD

loss=nn.MSELoss()
trainer=torch.optim.SGD(net.parameters(),lr=0.03)  #parameters表示所有模块数据[w,b]

开始训练

num_epochs=3
for epoch in range(num_epochs):
    for x,y in data_iter:
        l=loss(net(x),y)           #net中已经包含了w,b的参数
        trainer.zero_grad()
        l.backward()                     #torch已经帮忙做了sum了,可以直接backward
        trainer.step()                #优化更新模型
    l=loss(net(features),lables)
    print('epoch %d,loss %f'%(epoch+1,l.mean()))

框架让代码更简洁

你可能感兴趣的:(pytorch,深度学习,机器学习)