超简单的神经网络构建方法,你上你也行( 二 )
如果从 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轴为损失):
本文插图
模型已经训练完毕 , 现在该干嘛呢?当然是模型评估 。 需要以某种方式在原先未见的数据上对这个模型进行评估 。
推荐阅读
- 热量|为什么有的人喝凉水都长肉,有的人却光吃不胖?营养科医生:原因其实很简单
- 时尚丽佳人|小姐姐穿简单的包臀裙,减龄又洋气,尽显女人俏美身材
- 不器传媒贤青|后脚将其专车扔进大海,原因很简单,美国总统奥巴马前脚下台
- 五花肉|台式卤肉饭,简单美味营养,吃不够,适合夏天夏日快手菜谱
- 做法|一道好吃又下饭的做法,特别简单红烧腐竹
- 五花肉|用电饭锅还是头一次见,一看就会!五花肉很简单的做法
- 做饭小七七|百吃不厌的几道家常菜,鲜香可口,简单易学,好吃极了
- 左手哥|气质女生的夏日牛仔裤穿搭,简单时尚又清凉,值得借鉴
- 我国多地现大型海兽 专家一调查发现这只海兽没那么简单
- 技术大神 Native:使用Vue.js框架构建原生移动应用程序的指南,Vue
