pytorch实现前馈神经网络实验(torch实现)

举报
Studying-swz 发表于 2022/08/10 23:52:54 2022/08/10
【摘要】 手动实现请参考:https://blog.csdn.net/qq_37534947/article/details/109394648 二:“利用torch.nn实现前馈神经网络解决回归、二分类、多分类...

手动实现请参考:https://blog.csdn.net/qq_37534947/article/details/109394648

二:“利用torch.nn实现前馈神经网络解决回归、二分类、多分类任务”实验
注: 因为相比于手动实验其主要是在模型的构建中利用了torch.nn模块,其他的部分都是一样的,这里我主要介绍如何利用torch模块构建的模型。

2.1“利用torch.nn实现前馈神经网络解决回归”实验
实验过程:
2.1.1 利用torch.nn构建模型以及初始化参数

1.	#实现FlattenLayer层  
2.	class FlattenLayer(torch.nn.Module):  
3.	    def __init__(self):  
4.	         super(FlattenLayer, self).__init__()  
5.	    def forward(self, x):  
6.	        return x.view(x.shape[0],-1)  
7.	  
8.	#模型定义和参数初始化  
9.	num_hiddens,num_outputs = 256,1  
10.	net = nn.Sequential(  
11.	        FlattenLayer(),  
12.	        nn.Linear(num_inputs,num_hiddens),  
13.	        nn.ReLU(),  
14.	        nn.Linear(num_hiddens,num_outputs)  
15.	        )  
16.	  
17.	for params in net.parameters():  
18.	    init.normal_(params,mean=0,std=0.01)  

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注:这里我使用的是torch.nn.Sequential()来快速构建前馈神经网络,没有使用torch.nn.Moudle,因为对于此模型比较简单,所以使用前者来构建的话相比于后者更简洁和方便,可以从定义中看到其网络主要分为输入层、隐藏层、ReLU激活函数、输出层,并且每层的神经元个数都是和手动实现的一样的;另外,对于参数的初始化主要也是用的是torch.nn.init模块,其初始值同样属于均值为零,标准差为0.01。
2.1.2 定义损失函数和优化器

1.	lr = 0.01
2.	#损失函数和优化器  
3.	loss = torch.nn.MSELoss()  
4.	optimizer = torch.optim.SGD(net.parameters(),lr)  

  
 
  • 1
  • 2
  • 3
  • 4

注:同理,因为属于回归问题,这里使用的是最小化均方误差,另外对于优化器,也是使用的是小批量梯度梯度下降,只是这里使用的是torch模块中。
2.1.3定义训练模型
注:这里和4之前手动的定义训练模型是一样的,因为在定义函数的时候,我们直接考虑了手动实现和利用torch模块实现,所以只是在训练时传的参数有所区分即可,这里就不加赘述。

2.2“手动实现前馈神经网络解决二分类”实验
注:同理,因为相比于手动实验其主要是在模型的构建中利用了torch.nn模块,其他的部分都是一样的,这里我主要介绍如何利用torch模块构建的模型。

实验过程:
2.2.1利用torch.nn构建模型以及初始化参数

1.	#实现FlattenLayer层  
2.	class FlattenLayer(torch.nn.Module):  
3.	    def __init__(self):  
4.	         super(FlattenLayer, self).__init__()  
5.	    def forward(self, x):  
6.	        return x.view(x.shape[0],-1)  
7.	  
8.	#模型定义和参数初始化  
9.	num_hiddens,num_outputs = 256,1  
10.	net = nn.Sequential(  
11.	        FlattenLayer(),  
12.	        nn.Linear(num_inputs,num_hiddens),  
13.	        nn.ReLU(),  
14.	        nn.Linear(num_hiddens,num_outputs)  
15.	        )  
16.	  
17.	for params in net.parameters():  
18.	    init.normal_(params,mean=0,std=0.01) 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注:同理,这里我使用的是torch.nn.Sequential()来快速构建前馈神经网络,没有使用torch.nn.Moudle,因为对于此模型比较简单,所以使用前者来构建的话相比于后者更简洁和方便,可以从定义中看到其网络主要分为输入层、隐藏层、ReLU激活函数、输出层,并且每层的神经元个数都是和手动实现的一样的;另外,对于参数的初始化主要也是用的是torch.nn.init模块,其初始值同样属于均值为零,标准差为0.01。
2.2.2 定义损失函数和优化器

1.	lr = 0.01  
2.	#定义交叉熵损失函数  
3.	loss = torch.nn.BCEWithLogitsLoss()  
4.	optimizer = torch.optim.SGD(net.parameters(),lr)  

  
 
  • 1
  • 2
  • 3
  • 4

注:同理,因为属于二分类问题,这里使用的是交叉熵损失误差,另外对于优化器,也是使用的是小批量梯度梯度下降,只是这里使用的是torch模块中的。
2.2.3 定义训练模型函数
注:这里和手动的定义模型函数是一样的,因为在定义函数的时候,我们直接考虑了手动实现和利用torch模块实现,所以只是在训练时传的参数有所区分即可,这里就不加赘述。

2.3“手动实现前馈神经网络解决多分类”实验
注:同理,因为相比于手动实验其主要是在模型的构建中利用了torch.nn模块,其他的部分都是一样的,这里我主要介绍如何利用torch模块构建的模型.
实验过程:
2.3.1 利用torch.nn构建模型以及初始化参数

19.	#实现FlattenLayer层  
20.	class FlattenLayer(torch.nn.Module):  
21.	    def __init__(self):  
22.	         super(FlattenLayer, self).__init__()  
23.	    def forward(self, x):  
24.	        return x.view(x.shape[0],-1)  
25.	  
26.	#模型定义和参数初始化  
27.	num_inputs,num_hiddens,num_outputs = 784,256,10  
28.	net = nn.Sequential(  
29.	        FlattenLayer(),  
30.	        nn.Linear(num_inputs,num_hiddens),  
31.	        nn.ReLU(),  
32.	        nn.Linear(num_hiddens,num_outputs)  
33.	        )  
34.	  
35.	for params in net.parameters():  
36.	    init.normal_(params,mean=0,std=0.01) 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注:同理,这里我使用的是torch.nn.Sequential()来快速构建前馈神经网络,没有使用torch.nn.Moudle,可以从定义中看到其网络主要分为输入层、隐藏层、ReLU激活函数、输出层,并且每层的神经元个数都是和手动实现的一样的,分别是784,256,10;另外,对于参数的初始化主要也是用的是torch.nn.init模块,其初始值同样属于均值为零,标准差为0.01。
2.3.2 定义损失函数和优化器

5.	lr = 0.01  
6.	#定义交叉熵损失函数  
7.	loss = torch.nn. CrossEntropyLoss ()  
8.	optimizer = torch.optim.SGD(net.parameters(),lr) 

  
 
  • 1
  • 2
  • 3
  • 4

注:同理,因为属于多分类问题,这里使用的是交叉熵损失误差,另外对于优化器,也是使用的是小批量梯度梯度下降,只是这里使用的是torch模块中的。
2.3.3定义训练模型函数
注:这里和手动的定义模型函数是一样的,因为在定义函数的时候,我们直接考虑了手动实现和利用torch模块实现,所以只是在训练时传的参数有所区分即可,这里就不加赘述。

torch实现代码下载:
https://download.csdn.net/download/qq_37534947/13081252

文章来源: blog.csdn.net,作者:Studying_swz,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_37534947/article/details/109402126

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。