在前面我们介绍了如何用Pytorch来实现一个两层的神经网络,但是其编码过程略微显得有点复杂。例如我们要手动自己定义权重参数,自己书写如何进行梯度更新等等。但要是某个网络多达几十层,那这个工作量显然是巨大的。因此,将一些常用的操作定义成更高级的API接口也是每个深度学习框架应该包含的东西。下面,在这篇文章中我们就介绍如何用Pytorch来简洁的实现多层全连接网络。
1 数据集与网络结构
数据集我们还是使用sklearn中的波士顿房价预测数据集,其每个样本包含有13个特征维度。因此我们神经网络的输入层就应该是13个神经元。同时,由于是做房价预测的回归任务,因此其输出层应该为1个神经元。在这个任务中,我们以一个4层神经网络为例进行示例。
对于这么一个稍显复杂的网络结构应该怎么的快速实现呢?尽管图1中的网络结构比起前面的是多了几层,但是好在均为全连接层。在Pytorch中,我们可以直接调用nn.Linear(in_features, out_features, bias=True):
来进行实现。
2 代码实现
2.1 导入相关包
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
import torch
import torch.nn as nn
第四行代码为导入torch
中有关神经网络的相关操作。
2.2 载入数据
def load_data():
data = load_boston()
x, y = data.data, data.target
ss = StandardScaler()
x = ss.fit_transform(x) # 特征标准化
x = torch.tensor(x, dtype=torch.float32)
y = torch.tensor(y, dtype=torch.float32)