从0实现深度神经网络的正向传播
我们在前面几节已经学完了一个普通深度神经网络全部的基本元素——用来构筑神经网络的结构的层与
激活函数,输入神经网络的数据(特征、权重、截距),并且我们了解从左向右的过程是神经网络的正
向传播(也叫做前向传播,或者向前传播)。还记得我们的架构图吗?在过去的课程中我们所学习的内
容都是在torch.nn这个模块下,现在我们就使用封装好的torch.nn模块来实现一个完整、多层的神经网
络的正向传播。
假设我们有500条数据,20个特征,标签为3分类。我们现在要实现一个三层神经网络,这个神经网络的架构如下第一层有13个神经元,第二层有8个神经元,第三层是输出层。其中,第一层的激活函数是relu,第二层是sigmoid我们要如何实现它呢?来看代码:
import torch
import torch.nn as nn
from torch.nn import functional as F
#继承nn.Modules类来定义神经网路的架构
class Model(nn.Module):
#init:定义类本身,__init__函数是在类被实例化的瞬间就会执行的函数
def __init__(self,in_features=10,out_features=2):
super(Model,self).__init__() #super(请查找这个类的父类,请使用找到的父类替换现在的类)
self.linear1 = nn.Linear(in_features,13,bias=True) #输入层不用写,这里是隐藏层的第一层
self.linear2 = nn.Linear(13,8,bias=True)
self.output = nn.Linear(8,out_features,bias=True)
#__init__之外的函数,是在__init__被执行完毕后,就可以被调用的函数
def forward(self, x):
z1 = self.linear1(x)
sigma1 = torch.relu(z1)
z2 = self.linear2(sigma1)
sigma2 = torch.sigmoid(z2)
z3 = self.output(sigma2)
sigma3 = F.softmax(z3,dim=1)
return sigma3