首页 > 其他分享 >深度学习(十一)——神经网络:线形层及其他层介绍

深度学习(十一)——神经网络:线形层及其他层介绍

时间:2023-08-22 18:24:51浏览次数:40  
标签:他层 features nn torch None 神经网络 图像 output 线形

一、正则化层中nn.BatchNorm2d简介

主要作用:对输入函数采用正则化。正则化的主要作用是加快神经网络的训练速度。

class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)

输入参数:

  • num_features: 形状为\((N, C, H, W)\)

  • 其他参数默认即可

举例:

# With Learnable Parameters
m = nn.BatchNorm2d(100)
# Without Learnable Parameters
m = nn.BatchNorm2d(100, affine=False)
input = torch.randn(20, 100, 35, 45)
output = m(input)

该函数用得不多

二、其他层简介

1. Recurrent Layers(Recurrent层)

内含RNN、LSTM等函数,主要在nlp领域用的比较多

官方文档: Recurrent Layers

2. Transformer Layers

3. Linear Layers(线性层)

nn.Linear

class torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None

(1)参数介绍及计算方法

参数介绍:

  • in_features

  • out_features

  • bias(bool)

线性层具体参数解释如下图:

  • \(in\_features=d\),即指的是in_features的个数

  • \(out\_features=L\),即指的是out_features的个数

计算\(g\)的方法(以上图\(g_1\)为例):

  • \(x_1,\dots,x_i,\dots,x_d\)每个指向\(g_1\)的箭头上,均有:

\[k_i*x_i+b_i \]

  • 其中,\(b_i\)代表偏置,参数\(bias=True\),则加上\(b\);\(bias=False\),则不加\(b\)

  • 在每次训练神经网络的过程中,均会调整\(k_i\)、\(b_i\)的值,直到它变成一个合适的数值

  • 由此可得:

\[g_1=\sum^{d}_{i=1}{k_ix_i+b_i} \]

(2)代码示例

以典型的VGG16 Model网络结构为例:

因此,设置in_features=4096; out_feature=1000

  • 下面代码以一个尺寸为n×n的图像为例,先将图像展开成一行,即\(n^2\)的尺寸。最后将\(n^2\)尺寸的图像通过线性层,转化为1×10尺寸的图像。
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Linear

dataset=torchvision.datasets.CIFAR10("./dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloder=DataLoader(dataset,batch_size=64)

# for data in dataloder:
#     imgs,targets = data
#     #print(imgs.shape)   #[Run] torch.Size([64, 3, 32, 32])
#
#     #我们的目标是把图像尺寸变成1×1×1×根据前面计算得出的数,下面进行转换
#     output=torch.reshape(imgs,(1,1,1,-1))
#     #print(output.shape)  #[Run] torch.Size([1, 1, 1, 196608])

#根据上面output得出的196608尺寸数据,构造神经网络结构
class Demo(nn.Module):
    def __init__(self):
        super(Demo,self).__init__()
        self.linear1=Linear(in_features=196608,out_features=10)

    def forward(self,input):
        output=self.linear1(input)
        return output

#调用神经网络
demo=Demo()

for data in dataloder:
    imgs,targets=data
    output=torch.reshape(imgs,(1,1,1,-1))

    output=demo.forward(output)
    print(output.shape)  #[Run] torch.Size([1, 1, 1, 10])

由此,成功将1×1×1×196608尺寸的图像转化为1×1×1×10尺寸的图像

注意:

  • 可以用torch.flatten() 函数将图像展开成一行,即替换第33行的代码output=torch.reshape(imgs,(1,1,1,-1)),为:
output=torch.flatten(imgs)
# print(output.shape)  #[Run] torch.Size([196608])
  • torch.flatten()torch.reshape() 的区别:

    • torch.flatten更方便,可以直接把图像变成一行

    • torch.reshape功能更强大,可任意指定图像尺寸

4. Dropout Layers

主要作用:在训练的过程中随机把一些input(输入的tensor数据类型)变成0。变成0的概率由\(p\)决定

class torch.nn.Dropout(p=0.5, inplace=False)
  • 变成0的主要原因是防止过拟合

5. Sparse Layers

nn.Embedding

主要用于自然语言处理中

class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None,
      max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False,
      _weight=None, _freeze=False, device=None, dtype=None)

6.Distance Functions

主要作用:计算两个值之间的误差,并指定误差的衡量标准

7. Loss Function

主要作用:计算Loss的误差大小

三、调用pytorch中的网络模型

现在我们已经学会如何自己搭建神经网络模型了,下面介绍pytorch中神经网络模型的调用方法。根据官方文档,我们可以调用自己需要的网络结构,而不需要自己写代码

1.图像方面的网络结构

官网文档:Models and pre-trained weights — Torchvision 0.15 documentation

2.语音方面的网络结构

官方文档:torchaudio.models — Torchaudio 2.0.1 documentation

标签:他层,features,nn,torch,None,神经网络,图像,output,线形
From: https://www.cnblogs.com/zoubilin/p/17649353.html

相关文章

  • 论文解读:《采用预训练蛋白嵌入贝叶斯神经网络,提高了药物蛋白的预测精度
    期刊:Bioinformatics中科院分区:1Q影像因子:6.937一、摘要动机:表征药物-蛋白质相互作用对于药物发现的高通量筛选至关重要。基于深度学习的方法引起了人们的关注,因为它们无需人工试错即可预测药物蛋白质相互作用。然而,由于数据标记需要大量资源,可用的蛋白质数据量相对较小,从而降低了模......
  • R语言神经网络模型预测多元时间序列数据可视化|附代码数据
    全文链接:http://tecdat.cn/?p=32198最近我们被客户要求撰写关于神经网络的研究报告,包括一些图形和统计输出。多元时间序列建模一直是吸引了来自经济,金融和交通等各个领域的研究人员的主题 ( 点击文末“阅读原文”获取完整代码数据******** )。多元时间序列预测的一个基本假设......
  • 卷积神经网络
    卷积神经网络整体架构卷积层涉及参数激活函数每个区域提取的特征要尽可能的多?卷积大量提取特征,让下游有的选择,特征的多样性,第一层有丰富信息,第二层才有得做256512每个区域提取的特征要尽可能的多每个区域都有256个特征卷积核的层数和输入是一样的?刚刚输入的彩色图......
  • 头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解
    本文全面探讨了卷积神经网络CNN,深入分析了背景和重要性、定义与层次介绍、训练与优化,详细分析了其卷积层、激活函数、池化层、归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强、损失函数、优化器、学习率调整、正则化技巧与模型评估调优。旨在为人工智能学者使用卷......
  • 【深度学习 | CNN】“深入解析卷积神经网络与反卷积:从生活案例到原理的全面指南” (从
    ......
  • 无涯教程-TensorFlow - 递归神经网络
    递归神经网络是一种面向深度学习的算法,它遵循顺序方法。在神经网络中,无涯教程始终假定每个输入和输出都独立于所有其他层。这些类型的神经网络称为递归,因为它们以顺序的方式执行数学计算。表示递归神经网络的示意方法如下所述-实现递归神经网络在本节中,将学习如何使用TensorFl......
  • 无涯教程-TensorFlow - 卷积神经网络
    了解机器学习概念之后,无涯教程现在可以将重点转移到深度学习概念上,深度学习是机器学习的一个分支,被认为是近几十年来研究人员迈出的关键一步。深度学习实现的示例包括图像识别和语音识别等应用。以下是深度神经网络的两种重要类型-卷积神经网络递归神经网络在本章中,将重点介......
  • OpenCV3.3深度神经网络DNN模块 实例2:GoogleNet-Caffe模型实现图像分类
    1#include<opencv2/opencv.hpp>2#include<opencv2/dnn.hpp>3#include<iostream>4//使用GooglenetCaffe模型实现图像分类5usingnamespacecv;6usingnamespacecv::dnn;7usingnamespacestd;89Stringmodel_bin_file="D:/open......
  • OpenCV3.3深度神经网络DNN模块 实例3:SSD模型实现对象检测
    1#include<opencv2/opencv.hpp>2#include<opencv2/dnn.hpp>3#include<iostream>45usingnamespacecv;6usingnamespacecv::dnn;7usingnamespacestd;89constsize_twidth=300;//模型尺寸为300*30010constsize......
  • OpenCV3.3深度神经网络DNN模块 实例4:SSD-MobileNet模型实时对象检测
    1#include<opencv2/opencv.hpp>2#include<opencv2/dnn.hpp>3#include<iostream>45usingnamespacecv;6usingnamespacecv::dnn;7usingnamespacestd;89constsize_twidth=300;10constsize_theight=300;11cons......