超简单的神经网络构建方法,你上你也行( 二 )


如果从 X_train 开始检查前三行 , 会得到如下结果:

超简单的神经网络构建方法,你上你也行
本文插图

从 y_train开始则得到如下结果:

【超简单的神经网络构建方法,你上你也行】超简单的神经网络构建方法,你上你也行
本文插图

地基已经打好 , 下一环节将正式开始搭建神经网络 。

超简单的神经网络构建方法,你上你也行
本文插图

定义神经网络模型
模型的架构很简单 。 重头戏在于神经网络的架构:
1.输入层 (4个输入特征(即X所含特征的数量) , 16个输出特征(随机))
2.全连接层 (16个输入特征(即输入层中输出特征的数量) , 12个输出特征(随机))
3.输出层(12个输入特征(即全连接层中输出特征的数量) , 3个输出特征(即不同品种的数量)
大致就是这样 。 除此之外还将使用ReLU 作为激活函数 。 下面展示如何在代码里执行这个激活函数 。
class ANN(nn.Module): def __init__(self): super().__init__() self.fc1 =nn.Linear(in_features=4, out_features=16) self.fc2 =nn.Linear(in_features=16, out_features=12) self.output =nn.Linear(in_features=12, out_features=3) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.output(x) return x
PyTorch使用的面向对象声明模型的方式非常直观 。 在构造函数中 , 需定义所有层及其架构 , 若使用forward() , 则需定义正向传播 。
接着创建一个模型实例 , 并验证其架构是否与上文所指的架构相匹配:
model = ANN() model
在训练模型之前 , 需注明以下几点:
· 评价标准:主要使用 CrossEntropyLoss来计算损失
· 优化器:使用学习率为0.01的Adam 优化算法
下面展示如何在代码中执行CrossEntropyLoss和Adam :
criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
令人期盼已久的环节终于来啦——模型训练!

超简单的神经网络构建方法,你上你也行
本文插图

模型训练
这部分同样相当简单 。 模型训练将进行100轮, 持续追踪时间和损失 。 每10轮就向控制台输出一次当前状态——以指出目前所处的轮次和当前的损失 。
代码如下:
%%timeepochs = 100 loss_arr = []for i in range(epochs): y_hat = model.forward(X_train) loss = criterion(y_hat, y_train) loss_arr.append(loss) if i % 10 == 0: print(f'Epoch: {i} Loss: {loss}') optimizer.zero_grad() loss.backward() optimizer.step()
好奇最后三行是干嘛用的吗?答案很简单——反向传播——权重和偏置的更新使模型能真正地“学习” 。
以下是上述代码的运行结果:

超简单的神经网络构建方法,你上你也行
本文插图

进度很快——但不要掉以轻心 。
如果对纯数字真的不感冒 , 下图是损失曲线的可视化图(x轴为轮次编号 , y轴为损失):

超简单的神经网络构建方法,你上你也行
本文插图

模型已经训练完毕 , 现在该干嘛呢?当然是模型评估 。 需要以某种方式在原先未见的数据上对这个模型进行评估 。

超简单的神经网络构建方法,你上你也行


推荐阅读