#https://www.51cto.com/article/800938.html #https://www.cnblogs.com/BlairGrowing/p/15419088.html import torch import torch.nn as nn import torch.optim as optim # 1.定义数据 X = torch.tensor([[1.0], [2.0], [3.0], [4.0]])#房子面积 y = torch.tensor([[2.0], [5.0], [6.0], [10.0]])#房子总价 #补充,接下来,我们需要加载数据并进行预处理。这通常包括缺失值的处理,数据规范化等步骤。 #我们假设所有数据都是完整的,不需要进行缺失值处理。 #但是,为了使梯度下降算法能更快地收敛,我们需要对数据进行规范化处理。 #import numpy as np # 房屋面积 #areas = np.array([50, 60, 70, ..., 120, 130, 140], dtype=float) # 房价 #prices = np.array([300, 360, 420, ..., 720, 780, 840], dtype=float) # 数据规范化 #areas = (areas - np.mean(areas)) / np.std(areas) #prices = (prices - np.mean(prices)) / np.std(prices) #end 补充 # 2.定义模型 class LinearRegressionModel(nn.Module): def __init__(self): super(LinearRegressionModel, self).__init__() self.linear = nn.Linear(1, 1)#定义了一个线性层,输入特征为1,输出也为1 def forward(self, x): return self.linear(x) model = LinearRegressionModel() #w@input+b 等价于model(input) #model=nn.Linear(1,1) # 3.定义损失函数和优化器 #为了训练我们的模型,我们需要一个方法来度量我们的模型的预测值和实际值之间的差距。这就是损失函数(也叫成本函数)。 #对于线性回归模型,我们通常使用均方误差(MSE)作为损失函数: #L = 1/N * sum(y_pred - y_actual)^2 criterion = nn.MSELoss()#均方误差(相减再平方)损失函数 #目标是通过调整模型的参数w和b来最小化损失函数。这个过程被称为优化。 #梯度下降是一种常见的优化方法,工作原理是计算损失函数关于参数的梯度(导数),然后按照梯度的反方向调整参数,以便在损失函数上下降。 optimizer = optim.SGD(model.parameters(), lr=0.01)#随机梯度下降优化器,学习率为0.01 # 4.训练模型 num_epochs = 1000 for epoch in range(num_epochs): model.train()#使用模型预测 optimizer.zero_grad()#进行梯度清零 outputs = model(X)#求解梯度 loss = criterion(outputs, y)#根据预测计算损失 loss.backward()#求解梯度 optimizer.step()#优化模型参数 print(f'epoch {epoch + 1}, loss {loss.sum():f}') # 5.测试模型 model.eval()# 将模型设置为评估模式,因为我们不需要进行模型优化 P = torch.tensor([150.0])#求房子总价格 with torch.no_grad(): # 不需要计算梯度 predicted = model(P) print(predicted)