李沐老师-regression_consice-pycharm版实现

import numpy as np
import torch
from torch.utils import data   # 处理数据集
import regression
from torch import nn #nn是神经网络的缩写。定义了大量的层。线性回归用到的线性层或者全连接层。唯一指定输入维度,输出维度。
                     #输入是2,输出是1.

num_inputs=2
true_w=torch.tensor([2,-3,4])
true_b=4.2
num_examples=1000
features,labels=regression.synthetic_data(true_w,true_b,num_inputs)  #生成了数据

def load_array(data_arrays,batch_size,is_train=True):
    """构造一个pytorch的数据迭代器"""
    dataset =data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset,batch_size,shuffle=is_train) #shuffle 打乱数据集

batch_size=10
data_iter=load_array((features,labels),batch_size)  #假设已经得到了features和labels,做成list,传到TensorDataset里面。
#把X,y传进去,会得到pytorch的dataset。
#dataset里,拿到数据集之后,调用DataLoader这个函数,每次从里面随机挑选batch_size个样本出来。

next(iter(data_iter))
#也可直接用Linear层,线性回归就是一个简单的单层神经网络,为了之后方便,把它放到Sequential的容器里,理解成list of layers.把一些层,按顺序放到一起。
net =nn.Sequential(nn.Linear(2,1))
#network通过net[0]访问到layer,通过.weight来访问到w,.data里是真实data,.normal_是使用正态分布来替换掉data的值。
net[0].weight.data.normal_(0,0.01)
net[0].bias.data.fill_(0)

loss=nn.MSELoss()
trainer=torch.optim.SGD(net.parameters(),lr=0.03)

num_epochs=3

for epoch in range(num_epochs):
    for X,y in data_iter:
        l=loss(net(X),y)
        trainer.zero_grad()
        l.backward()
        trainer.step() #进行模型更新
    l=loss(net(features),labels)
    print(f'epoch{epoch+1},loss{1:f}')

猜你喜欢

转载自blog.csdn.net/qq_45828494/article/details/126346788
今日推荐