欧洲杯正规(买球)下单平台·中国官方全站

欧洲杯投注入口 ybatch_x -欧洲杯正规(买球)下单平台·中国官方全站

发布日期:2024-10-15 05:21    点击次数:204

欧洲杯投注入口 ybatch_x -欧洲杯正规(买球)下单平台·中国官方全站

本文重心

咱们前边学习了基于pytoch搭建一元线性追想模子,本文咱们学习使用pytorch搭建多项式的追想模子,在学习这个之前咱们需要了解一下什么是多项式追想模子?

多项式追想模子和多变量(多特征)的追想模子是不相似的,多变量即是一个样本有多个特征属性,而多项式即是一个样本还只须一个属性x,然而无意期可能拟合后果不好,咱们不错商酌多项式追想,也即是擢升每个属性的次数,总的来说即是多项式的追想模子的特征是(x,x²,x³...),而多变量的追想模子的特征是(x1,x2,x3...),本文咱们学习多项式追想模子的搭建。

模子搭建

class Polynomial_Regression(nn.Module): def __init__(self): super(Polynomial_Regression,self).__init__() self.poly=nn.Linear(3,1)#这里的模子输入是 3 维,输山是 1 维, def forward(se1f,x): out = se1f.poly(x) return out

这个模子有三个输入,一个输出,它的可视化模子图如下所示:

构建数据

此时的网罗模子有三个输入,是以咱们构建数据的时期,每一个样本应该有三个特征值,底下咱们仍是随即的构建一些稳妥条件的数据集

import torchimport numpy as npW_target = torch.FloatTensor([0.7, 2.5, 2.4]) .unsqueeze(1) b_target = torch.FloatTensor([0.8])def f (x) : return x.mm (W_target) + b_target[0]def make_features(x): x=x.unsqueeze(1) #将x转成些许行1列 return torch.cat([x**i for i in range(1, 4)],1) def get_batch(batch_size=64) : random = torch.randn(batch_size) #随即64个数,组成一个向量 x = make_features(random) #赢得样本的特征 y = f(x) #赢得样本的标签 if torch.cuda.is_available() : return x.cuda() , y.cuda() else: return x , ybatch_x ,batch_y=get_batch()#最终的数据顺次print(batch_x.shape)print(batch_y.shape)

代码贯通:

这里咱们只是是为了构建数据集,咱们构建batch-size个数据,然后再make_featrues中构建样本特征:x、x²、x³,然后在f中构建标签y(按照f的映射相干构建y),然后x和y齐有了,此时x的维度为(64,3),而y的维度为(64,1),那么也即是说一共有64个数据,每个数据的维度为3,恰好对应上头咱们诞生的网罗模子。

检修模子

面前有了模子,有了数据,那么咱们就不错径直进行模子的检修了,代码如下:

import torchimport numpy as npimport torch.nn as nnimport torch.optim as optim def f (x) : return x.mm (W_target) + b_target[0] W_target = torch.FloatTensor([0.7, 2.5, 2.4]) .unsqueeze(1) b_target = torch.FloatTensor([0.8])def make_features(x): x=x.unsqueeze(1) #将x转成些许行1列 return torch.cat([x**i for i in range(1, 4)],1) def get_batch(batch_size=64) : random = torch.randn(batch_size) x = make_features(random) y = f(x) if torch.cuda.is_available() : return x.cuda() , y.cuda() else: return x , y class Polynomial_Regression(nn.Module): def __init__(self): super(Polynomial_Regression,self).__init__() self.poly=nn.Linear(3,1)#这里的模子输入是 3 维,输山是 1 维, def forward(se1f,x): out = se1f.poly(x) return out if torch.cuda.is_available() : model = Polynomial_Regression().cuda() else: model = Polynomial_Regression() criterion=nn.MSELoss()#界说亏损函数,均方错误optimizer=optim.SGD(model.parameters(),lr=1e-3)#界说优化器,梯度着落 while True: batch_x ,batch_y=get_batch() output =model(batch_x)#使用模子进行忖度 loss=criterion(output,batch_y)#筹划错误 print_loss=loss.item() print("面前亏损",print_loss) optimizer.zero_grad()#在优化之前需要先将梯度归零a loss.backward()#反向传播 optimizer.step()#完成参数的更新 if print_loss <1e-3: break#模子保存 torch.save(model,'./model.pth')torch.save(model.state_dict(),'./model_state.pth')

代码贯通:

此时的代码举座来看和前边的基于pytoch搭建一元追想模子的代码差未几欧洲杯投注入口,然而仍是有一些折柳,领先这个代码莫得指明咱们的模子检修些许个epoch,而是使用while轮回的表情,通过判断loss的值是否小于1e-3,若是确立则跳出检修轮回,然后保存模子。