抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
  • 用cpu就能很快跑出来
  • 不需要额外的输入文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import torch
import numpy as np
import torch.nn as nn


x_values = [i for i in range(11)] # [0,1,2,3,4,5,6,7,8,9,10]
x_train = np.array(x_values, dtype=np.float32)
x_train = x_train.reshape(-1, 1) # 将x_train调整为11*1的矩阵

y_values = [2.5*i+3.5 for i in x_values] # y=2.5x+3.5
y_train = np.array(y_values, dtype=np.float32)
y_train = y_train.reshape(-1, 1)

class LinearRegressionModel(nn.Module): # 继承自nn包的Module类

def __init__(self, input_dim, output_dim):
super(LinearRegressionModel, self).__init__() # 执行父类的构造函数
self.linear = nn.Linear(input_dim, output_dim)
# nn.Linear(输入数据维度, 输出数据维度) 全连接层

def forward(self, x):
out = self.linear(x)
return out

input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim, output_dim)

epochs = 1000 # 训练次数
learning_rate = 0.01 # 学习率
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
# 优化器,使用基本的优化器SGD,传入需要更新的参数(model中的全部参数)和学习率
criterion = nn.MSELoss() # 回归任务可选用MSE等

for epoch in range(epochs):
epoch += 1
# x_train和y_train均为numpy.ndarry格式,需要转换为tensor格式才可以传入框架
inputs = torch.from_numpy(x_train)
labels = torch.from_numpy(y_train)

# 每次迭代开始时 梯度需要清零
optimizer.zero_grad()

# 前向传播
outputs = model.forward(inputs)

# 计算损失
loss = criterion(outputs, labels)

# 反向传播
loss.backward()

# 更新权重参数
optimizer.step()

# 每50个epoch输出一次,以显示训练进度
if epoch % 50 == 0:
print('epoch {}, loss {}'.format(epoch, loss.item()))

y_predicted = model.forward(torch.from_numpy(x_train)).data.numpy()
# 前向传播 传入训练数据x 输出预测结果y 用以测试
# .data.numpy() 将结果转换成numpy
print(y_predicted)


评论