新建仓库维护数据预测项目
This commit is contained in:
30
FC_ML_NN/NN_Multi_Polynomial_Test.py
Normal file
30
FC_ML_NN/NN_Multi_Polynomial_Test.py
Normal file
@@ -0,0 +1,30 @@
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
|
||||
#多元多项式拟合
|
||||
|
||||
# 数据生成 (x1, x2 -> y)
|
||||
x1 = torch.rand(100, 1) * 4 - 2 # [-2, 2]
|
||||
x2 = torch.rand(100, 1) * 3 - 1 # [-1, 2]
|
||||
y_true = 2.7*x1 + 3.0*x2 + 5.0*x1*x2 - 1.5*x1**2*x2 # 真实多项式
|
||||
|
||||
# 特征工程
|
||||
def make_features(x1, x2, degree=3):
|
||||
features = [torch.ones_like(x1)]
|
||||
for d in range(1, degree+1):
|
||||
for i in range(d+1):
|
||||
features.append((x1**i) * (x2**(d-i)))
|
||||
return torch.cat(features, dim=1)
|
||||
x_poly = make_features(x1, x2, degree=3)
|
||||
|
||||
# 模型训练
|
||||
model = nn.Sequential(nn.Linear(10, 1)) # 3次多项式共10项
|
||||
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, weight_decay=0.1)
|
||||
for epoch in range(2000):
|
||||
y_pred = model(x_poly)
|
||||
loss = nn.MSELoss()(y_pred, y_true)
|
||||
optimizer.zero_grad()
|
||||
loss.backward()
|
||||
optimizer.step()
|
||||
if epoch % 500 == 0:
|
||||
print(f'Epoch {epoch}, Loss: {loss.item():.4f}')
|
||||
Reference in New Issue
Block a user