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

技术多分类任务中不同隐藏层层数对实验结果的影响 多分类任务中不同隐藏层层数对实验结果的影响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.1 锁的概念在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时

    礼包 2021年11月7日
  • Jupyter Notebook如何适应数据科学的发展方向

    技术Jupyter Notebook如何适应数据科学的发展方向本篇文章为大家展示了Jupyter Notebook如何适应数据科学的发展方向,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有

    攻略 2021年12月4日
  • 华为手机什么型号好,华为手机哪个系列用的比较好

    技术华为手机什么型号好,华为手机哪个系列用的比较好可以根据自身经济实力来选择购买华为手机什么型号好,至于说哪个系列比较好用,除华为麦芒入门级的差,其他的系列满足普通人的要求是绰绰有余;不过个人经验觉得钱贵一些的旗舰机使用

    生活 2021年10月28日
  • 窗口事件

    技术窗口事件 窗口事件1.窗口事件属性:
    window.onfocus = function(){ // 窗口获取焦点事件};
    window.οnblur= function(){ // 窗口失去焦点事

    礼包 2021年12月5日
  • CentOS 7.3上SQL Server vNext CTP 1.2如何安装

    技术CentOS 7.3上SQL Server vNext CTP 1.2如何安装这篇文章给大家分享的是有关CentOS 7.3上SQL Server vNext CTP 1.2如何安装的内容。小编觉得挺实用的,因此分享

    攻略 2021年11月15日
  • 用好像写一句话,用好像……好像……好像造句

    技术用好像写一句话,用好像……好像……好像造句1、天空中的云变幻无穷,有的像小狗,好像在伏在地上打盹用好像写一句话;有的像野狼,好像在仰天长啸;有的像雄鹰,好像在展翅飞翔。2、花园里的花真是千姿百态:有的傲立在枝头,好像

    生活 2021年10月22日