import torch
import numpy as np
from torch.autograd import Variable
from torch import nn,optim
import matplotlib.pyplot as plt
数据的准备阶段:
defmake_features(x):# 定义函数,来随机先产生一个[x,x^2,x^3],通过代码x.unsqueeze(1),增加了一个维度,变成[[x],[x^2],[x^3]]
x = x.unsqueeze(1)return torch.cat([x ** i for i inrange(1,4)],dim =1)
defget_batch(batch_size =32):# 随一批产生32个数
random = torch.randn(batch_size)
random = np.sort(random)# 画图要进行排序
random = torch.from_numpy(random)#!!这一行代码很重要,他说明了Torch中的Tensor和numpy中的array具有不同的属性,能进行的操作也是不同的
x = make_features(random)# 将随机产生的数进行增加维度,并且进行平方、三次方
y = f(x)# 得到f(x)if torch.cuda.is_available():# 将Tensor转变成Variable,因为进入模型进行线性层,进行优化的时候,要求是变量类型的return Variable(x).cuda(),Variable(y).cuda()else:return Variable(x),Variable(y)
准备好数据集后,建立模型,训练参数,nn.Linear(),模型里有前向传播
classpoly_model(nn.Module):# 继承父类def__init__(self):# 继承父类,必须进行初始化super(poly_model,self).__init__()# 将self理解成子类的对象,对象可以添加相应的的方法和属性
self.poly = nn.Linear(3,1)# 关键部分,进行拟合的核心,用到了线性层defforward(self,x):# 前向传播
out = self.poly(x)return out
下面应该算是创建模型的对象:
if torch.cuda.is_available():
model = poly_model().cuda()else:
model = poly_model()