搭建 pytorch 神经网络进行气温预测
构建简单的神经网络
input_size = input_features.shape[1]
hidden_size = 128
output_size = 1
batch_size = 16
my_nn = torch.nn.Sequential(
torch.nn.Linear(input_size, hidden_size),
torch.nn.Sigmoid(),
torch.nn.Linear(hidden_size, output_size),
)
cost = torch.nn.MSELoss(reduction='mean')
optimizer = torch.optim.Adam(my_nn.parameters(), lr = 0.001)
input_features.shape[1]:0 表示样本数,1 表示特征数
batch.size:指定每次迭代的样本的个数,这个操作是为了提升模型的计算效率
.liner:执行的是 wx+b 的线性操作
.MSLEoss:计算损失
torch.optim.Adma:优化器,更新模块中的所有参数
训练网络
losses = []
for i in range(1000):
batch_loss = []
# MINI-Batch方法来进行训练
for start in range(0, len(input_features), batch_size):
end = start + batch_size if start + batch_size < len(input_features) else len(input_features)
xx = torch.tensor(input_features[start:end], dtype = torch.float, requires_grad = True)
yy = torch.tensor(labels[start:end], dtype = torch.float, requires_grad = True)
prediction = my_nn(xx)
loss = cost(prediction, yy)
optimizer.zero_grad()
loss.backward(retain_graph=True)
optimizer.step()
batch_loss.append(loss.data.numpy())
# 打印损失
if i % 100==0:
losses.append(np.mean(batch_loss))
print(i, np.mean(batch_loss))
optimizer.zero_grad():w,b梯度清零
optimizer.step():参数更新
值得注意的是
torch 处理数据类型是 tensor(张量),numy 处理的数据类型是 ndarray,可视化展示的数据类型也需要是 ndarray