多分类任务中不同隐藏层层数对实验结果的影响

技术多分类任务中不同隐藏层层数对实验结果的影响 多分类任务中不同隐藏层层数对实验结果的影响1 导入实验所需要的包 import torch
import torch.nn as nn
import nu

多分类任务中不同隐藏层层数对实验结果的影响

一导入实验所需要的包

进口火炬

将火炬网导入为神经网络

将numpy作为铭牌导入

导入火炬视觉

导入torchvision.transforms作为转换

将matplotlib.pyplot导入为plt

来自火炬。utils。数据导入数据加载器

2下载MNIST数据集和读取数据

train _ dataset=火炬视觉。数据集。mnist(root='./数据集/MNIST ',训练=真,变换=变换。传感器(),下载=真)

test _ dataset=火炬视觉。数据集。mnist(root='./数据集/MNIST ',训练=假,变换=变换。传感器(),下载=真)

train _ x=train _ dataset。数据。cuda().float()/255

train _ y=train _ dataset。目标。cuda().长()

test_x=test_dataset.data.cuda().float()/255

test _ y=test _数据集。目标。cuda().长()

train _ dataset=TensorDataset(train _ x,train_y)

test _ dataset=TensorDataset(test _ x,test_y)

批处理大小=32

train _ ITER=DataLoader(train _ dataset,batch_size=32,shuffle=True)

test _ ITER=DataLoader(test _ dataset,batch_size=32,shuffle=False)

next(iter(train_iter))[0].形状

next(iter(test_iter))[0].形状

3定义模型参数

#训练次数和学习率

num _ epochs,lr=50,0.01

num_inputs,num_outputs=28*28,10

四定义模型

第一种:定义一个有三层的前馈神经网络

类线性网络1(nn .模块):

def __init__(self,num_inputs=784,num_outputs=10,num_hiddens=100):

super(LinearNet_1,self).__init__()

自线性化1=nn线性(数字输入,数字输出)

self.relu=nn .ReLU()

自线性化2=nn线性(数字输出)

向前延迟(自我,x):

x=自线性化1(x)

x=self.relu(x)

x=自线形2(x)

y=self.relu(x)

返回y

第二种:定义一个有四层的前馈神经网络

类线性网络2(nn .模块):

def __init__(self,num_inputs=784,num_outputs=10,num_hiddens1=100,num_hiddens2=100):

super(LinearNet_2,self).__init__()

自线性化1=nn线性(num_inputs,num_hiddens1)

self.relu=nn .ReLU()

自线性化2=nn线性(num_hiddens1,num_hiddens2)

非线性3=nn线性(num_hiddens2,num_outputs)

向前延迟(自我,x):

x=自线性化1(x)

x=self.relu(x)

x=自线形2(x)

x=self.relu(x)

x=自线形3(x)

y=self.relu(x)

返回y

第三种:定义一个有五层的前馈神经网络

类线性网络3(nn .模块):

def __init__(self,num_inputs=784,num_outputs=10,num_hiddens1=100,num_hiddens2=100,num_hiddens3=100):

super(LinearNet_3,self).__init__()

自线性化1=nn线性(num_inputs,num_hiddens1)

self.relu=nn .ReLU()

自线性化2=nn线性(num_hiddens1,num_hiddens2)

非线性3=nn线性(num_hiddens2,num_hiddens3)

非线性4=nn线性(num_hiddens3,num_outputs)

向前延迟(自我,x):

x=自线性化1(x)

x=self.relu(x)

x=自线形2(x)

x=self.relu(x)

x=自线形3(x)

x=self.relu(x)

x=自线形4(x)

y=self.relu(x)

返回y

5定义训练模型

def train(net,train_iter,test_iter,loss,num _ epochs,batch_size,params=None,lr=None,optimizer=None):

train_ls,test_ls=[],[]

对于范围内的纪元(num _ epoch):

ls,计数=0,0

对于train_iter:中的x,y

X=X。重塑(-1,num_inputs) #[32,28,28] - [32,784]

l=损失(净额(X,y)

optimizer.zero_grad()

l.backward()

optimizer.step()

ls=l.item()*y.shape[0]

train_ls.append(ls)

ls,计数=0,0

对于test_iter:中的x,y

X=X。整形(-1,输入数)

l=损失(净额(X,y)

ls=l.item()*y.shape[0]

test_ls.append

如果(纪元1)%5==0:

打印(“epoch: %d,train loss: %f,test loss :% f”%(epoch 1,train_ls[-1],test_ls[-1])

回程列车,测试

6 模型训练

total_net=[LinearNet_1,LinearNet_2,LinearNet_3]

Train_loss,Test_loss=[],[]

#定义损失函数

损失=nn .CrossEntropyLoss()

对于cur_net in total_net:

net=cur_net()

net.parameters()中的参数为:

nn.init.normal_(参数,平均值=0,标准=0.01)

优化器=火炬。optim。SGD(净额。参数(),lr=0.001)

train_ls,test_ls=train(net,train_iter,test_iter,loss,num_epochs,batch_size,net.cuda().参数,lr,优化器)

Train_loss.append(train_ls)

Test_loss.append(test_ls)

七绘制不同隐藏层数损失图

x=np.linspace(0,len(train_ls),len(train_ls))

PLT。图大小=(10,8))

对于(0,3):范围内的我

PLT。PLT(x,Train_loss[i],标签=f '带{ I }隐藏层: ',线宽=1.5)

plt.xlabel('epoch ')

plt.ylabel("损失")

plt.legend()

plt.title("列车损失")

plt.show()

因上求缘,果上努力~~~~ 作者:希望每天涨粉,转载请注明原文链接:https://www .cn博客。com/BlairgString/p/15511072。超文本标记语言

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/70029.html

(0)

相关推荐

  • 冷造句,一阵寒风吹过我冷得怎么造句

    技术冷造句,一阵寒风吹过我冷得怎么造句1 数九寒天冷造句,冰封千里。整个世界成了只大冰箱,山冷得在颤抖,河冻得僵硬了,空气也似乎要凝固起来。2 天气冷得能把湖水结成厚冰刚烧开的水,一落地就结冰了。3 春天的风是暖暖的风,

    生活 2021年10月20日
  • 微信sdk里有没有验证签名的方法(微信两个项目共用jssdk签名)

    技术微信JS-SDK签名接口怎么用这篇文章给大家分享的是有关微信JS-SDK签名接口怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先我们看一下微信公众号开发关于微信JS-SDK的使用说

    攻略 2021年12月24日
  • selenium测试过程动了键盘(selenium判断点击事件是否成功)

    技术selenium中键盘事件的示例分析这篇文章主要介绍了selenium中键盘事件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。例:from

    攻略 2021年12月17日
  • leetcode反转链表怎么用(leetcode链表怎么分割)

    技术LeetCode如何实现部分链表反转这篇文章将为大家详细讲解有关LeetCode如何实现部分链表反转,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。部分链表反转。1)链表为空或者一个

    攻略 2021年12月15日
  • 如何进行MongoDB查询文档

    技术如何进行MongoDB查询文档如何进行MongoDB查询文档,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。查询文件使用inventory集合。插入inv

    攻略 2021年11月4日
  • 如何配置web.xml中Filter的过滤器

    技术如何配置web.xml中Filter的过滤器小编给大家分享一下如何配置web.xml中Filter的过滤器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起

    攻略 2021年11月18日