1. 分享一个PyTorch医学图像分割开源库
  2. 从实战的角度看看,稍微有点收获,视频:CNN 从0到1助你快速入门PyTorch和TensorFlow。github网页:Convolutional Neural Network
  3. 常用激活函数(激励函数)理解与总结

------------------Pytorch学习--------------

  1. 书籍,深度学习框架与pytorch入门与实践:第四章 神经网络工具箱nn
  2. 《PyTorch的nn.Linear()详解》 ,官网《torch.nn.Linear》
    学习具体参数,

    class:torch.nn.Linear(in_featuresout_featuresbias=Truedevice=Nonedtype=None)

  3. 《Conv2d函数详解(Pytorch)》,官网《torch.nn.Conv2d》
    学习具体参数,了解推算过程。
    定义:torch.nn.Conv2d(in_channelsout_channelskernel_sizestride=1padding=0dilation=1groups=1bias=Truepadding_mode='zeros'device=Nonedtype=None)[

    >>> # With square kernels and equal stride
    >>> m = nn.Conv2d(16, 33, 3, stride=2)
    >>> input = torch.randn(20, 16, 50, 100)
    >>> output = m(input)
  4. 《pytorch avg_pool2d》,官网《torch.nn.AvgPool2d》。走一遍例子,熟悉一下平均池化的具体参数。
    定义:
    torch.nn.AvgPool2d(kernel_size, stride=Nonepadding=0ceil_mode=Falsecount_include_pad=Truedivisor_override=None)

    >>> # pool of square window of size=3, stride=2
    >>> m = nn.AvgPool2d(3, stride=2)
    >>> input = torch.randn(20, 16, 50, 32)
    >>> output = m(input)
  5. 批标准化。
    机器学习中,进行模型训练之前,需对数据做归一化处理,使其分布一致。在深度神经网络训练过程中,通常一次训练是一个batch,而非全体数据。每个batch具有不同的分布产生了internal covarivate shift问题——在训练过程中,数据分布会发生变化,对下一层网络的学习带来困难。

    Batch Normalization将数据拉回到均值为0,方差为1的正态分布上(归一化),一方面使得数据分布一致,另一方面避免梯度消失、梯度爆炸。 Batch Noramlization 是想让输入满足同一个分布, 那么是让输入的什么特征满足同一分布呢?就是让每张图片的相同通道的所有像素值的均值和方差相同。比如我们有两张图片(都为3通道),我们现在只说R通道,我们希望第一张图片的R通道的均值 和 第二张图片R通道的均值相同,方差同理。

    为了减小Internal Covariate Shift,对神经网络的每一层做归一化不就可以了,假设将每一层输出后的数据都归一化到0均值,1方差,满足正态分布。但是,此时有一个问题,每一层的数据分布都是标准正太分布,导致其完全学习不到输入数据的特征,因为,费劲心思学习到的特征分布被归一化了,因此,直接对每一层做归一化显然是不合理的。 但是如果稍作修改,加入可训练的参数做归一化,那就是Batch Norm实现的

    这篇文章解释了整个过程,《Pytorch:nn.BatchNorm2d()函数》
    分别描述一遍:
    《pytorch中BatchNorm1d、BatchNorm2d、BatchNorm3d》
    《pytorch——nn.BatchNorm1d()》,官网《nn > BatchNorm1d》;

    代码验证批处理的过程参考《【PyTorch】详解pytorch中nn模块的BatchNorm2d()函数》;
    定义:
    torch.nn.BatchNorm2d(num_featureseps=1e-05momentum=0.1affine=Truetrack_running_stats=Truedevice=Nonedtype=None)

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

    优点:

    ①不仅仅极大提升了训练速度,收敛过程大大加快;

    ②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;

    ③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。

  6. nn.dropout:
    我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。网络可以防止出现过拟合。
    测试代码参考这篇《torch.nn.dropout和torch.nn.dropout2d的区别》,网络中实际使用参考这篇《pytorch之Dropout》
    定义:
    torch.nn.Dropout(p=0.5inplace=False)

    >>> m = nn.Dropout(p=0.2)
    >>> input = torch.randn(20, 16)
    >>> output = m(input)
  7. 激活函数:
    原理:
    激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。”
    如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。
    参数解释,参考官网《nn.ReLU》。
    示例参考《关于nn.ReLU函数》。
  8. torch.nn.Sequential:网络模块有序初始化,自动实现了forword函数,必须确保前一个模块的输出大小和下一个模块的输入大小是一致的。具体讲解,参考《pytorch系列7 -----nn.Sequential讲解》
    from collections import OrderedDict
    net3= nn.Sequential(OrderedDict([('conv1', nn.Conv2d(3, 3, 3)),('bn1', nn.BatchNorm2d(3)),('relu1', nn.ReLU())]))
    print('net3:', net3)

    输出:
    net3: Sequential(
      (conv1): Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1))
      (bn1): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (relu1): ReLU()
    )

  9. nn.ModuleList,和Sequential比,Modulelist内部没有forword功能,没有顺序性要求,也没有级联需求。ModuleList是Module的子类,当在Module中使用它的时候,就能自动识别为子module。
  10. 损失函数nn.CrossEntropyLoss:
    # Example of target with class probabilities
    loss = nn.CrossEntropyLoss()
    input = t.randn(3, 5, requires_grad=True)
    target = t.randn(3, 5).softmax(dim=1)
    output = loss(input, target)
    output.backward()
    # batch_size=3,计算对应每个类别的分数(只有两个类别)
    score = t.randn(3, 2)
    # 三个样本分别属于1,0,1类,label必须是LongTensor
    label = t.Tensor([1, 0, 1]).long()# loss与普通的layer无差异
    criterion = nn.CrossEntropyLoss()
    loss = criterion(score, label)
    loss
  11. 优化器torch.optim:,使用方法,参考教程《优化器:torch.optim》。如何自适应调整学习率,参考《PyTorch 笔记(18)— torch.optim 优化器的使用
  12. 初始化策略torch.nn.init: PyTorch中nn.Module的模块参数都采取了较为合理的初始化策略,因此一般不用我们考虑。当我们在使用Parameter时,自定义初始化则尤为重要,因t.Tensor()返回的是内存中的随机数,很可能会有极大值,这在实际训练网络中会造成溢出或者梯度消失。PyTorch中nn.init模块就是专门为初始化而设计。
    初始化Tensor的分布,参考这篇《torch.nn.init 官方使用手册「总结」》、还有官网《torch.nn.init》
    例子:

    import torch
    import torch.nn as nnw = torch.empty(3,5)#1.均匀分布 - u(a,b)
    #torch.nn.init.uniform_(tensor, a=0.0, b=1.0)
    print(nn.init.uniform_(w))
    # =======================================================
    # tensor([[0.9160, 0.1832, 0.5278, 0.5480, 0.6754],
    #         [0.9509, 0.8325, 0.9149, 0.8192, 0.9950],
    #         [0.4847, 0.4148, 0.8161, 0.0948, 0.3787]])
    # =======================================================
  13. nn.Module深入分析:ddd
    如果想要更深入地理解nn.Module,究其原理是很有必要的。首先来看看nn.Module基类的构造函数:

    def __init__(self):self._parameters = OrderedDict()self._modules = OrderedDict()self._buffers = OrderedDict()self._backward_hooks = OrderedDict()self._forward_hooks = OrderedDict()self.training = True

    其中每个属性的解释如下:
    _parameters:字典,保存用户直接设置的parameter,self.param1 = nn.Parameter(t.randn(3, 3))会被检测到,在字典中加入一个key为'param',value为对应parameter的item。而self.submodule = nn.Linear(3, 4)中的parameter则不会存于此。
    _modules:子module,通过self.submodel = nn.Linear(3, 4)指定的子module会保存于此。
    _buffers:缓存。如batchnorm使用momentum机制,每次前向传播需用到上一次前向传播的结果。
    _backward_hooks与_forward_hooks:钩子技术,用来提取中间变量,类似variable的hook。
    training:BatchNorm与Dropout层在训练阶段和测试阶段中采取的策略不同,通过判断training值来决定前向传播策略。
    上述几个属性中,_parameters、_modules和_buffers这三个字典中的键值,都可以通过self.key方式获得,效果等价于self._parameters['key'].

  14. ddd
  15. ddd

总结2-深度学习网络搭建学习相关推荐

  1. DFF(深度前馈网络)学习参考

    这篇教程是翻译Peter Roelants写的神经网络教程,作者已经授权翻译,这是原文. 该教程将介绍如何入门神经网络,一共包含五部分.你可以在以下链接找到完整内容. (一)神经网络入门之线性回归 L ...

  2. 深度学习中的网络表征学习的算法目标简介

    https://www.toutiao.com/a6639983875458073095/ 2018-12-28 18:08:39 深度学习网络表征学习算法的目标是获得网络的低维稠密表示.对于大规模网 ...

  3. 对抗的深度卷积生成网络来学习无监督表示

    对抗的深度卷积生成网络来学习无监督表示 主线为 Alec Radford 与 Luke Metz 等人的论文"Unsupervised Representation Learning wit ...

  4. 深度残差网络的无人机多目标识别

    深度残差网络的无人机多目标识别 人工智能技术与咨询 来源:<图学学报>.作者翟进有等 摘要:传统目标识别算法中,经典的区域建议网络(RPN)在提取目标候选区域时计算量大,时间复杂度较高,因 ...

  5. Deep Image Prior:深度卷积网络先天就理解自然图像

    点击我爱计算机视觉标星,更快获取CVML新技术 昨天分享了文章ICCV 2019 | Adobe 无需大量数据训练,内部学习机制实现更好的视频修补,其中借鉴的Deep Image Prior (DIP ...

  6. 手把手教你搭建pytorch深度学习网络

    总有人在后台问我,如今 TensorFlow 和 PyTorch 两个深度学习框架,哪个更流行? 就这么说吧,今年面试的实习生,问到常用的深度学习框架时,他们清一色的选择了「PyTorch」. 这并不 ...

  7. 搭建深度学习网络识别图片--猫狗大战

    猫狗大战(项目代码:https://github.com/JasonZhou89/kaggle--Dogs-vs.-Cats-Redux-Kernels-Edition) 一. 问题的定义 1.1 项 ...

  8. 如何利用扬声器构建深度学习网络?

    简 介: 来自于康纳尔大学的这篇研究论文给出了 一个利用物理系统实现深层网络学习和推理的框架.本文对于文章举例的三个系统不属于线性时不变系统进行分析.除了其中SHG系统比较复杂之外,其它两个系统(三极 ...

  9. Miniconda3+PyTorch1.7.1(GPU版)+Win10_x64+GTX1060深度学习环境搭建

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 硬件信息: 系统:win10家庭中文版 CPU:i7-7700HQ 内存:16GB 显卡:GTX1060 目录 一.确定 ...

最新文章

  1. java判断总共天数_Java判断两个日期相差天数的方法
  2. 从源码了解spring bean实例化过程
  3. vba sub是什么缩写_这些掌握了,你才敢说自己懂VBA
  4. oracle安装完成EM不能登录,oracle数据库不能登录em问题的解决方法
  5. LSMW批处理使用方法(04)_步骤3上
  6. DIY服务器配置全方位详解
  7. js 从一个函数中传递值到另一个函数
  8. 基于@Bean声明lazy-queue
  9. php基础教程 第五步 逻辑控制
  10. PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎
  11. oracle11优点,争先体味Oracle 11g的新特点
  12. 【Node】—nodemon的简单使用
  13. 赚钱是成年人最大的体面
  14. 全网最详细的idea安装教程
  15. php中几个操作函数参数的函数func_num_args() func_get_args() func_get_arg($i)php
  16. Padavan安装使用ZeroTier实现组建虚拟局域网的方法
  17. C++获取Unix时间戳(分别以秒和毫秒为单位)的几种方法
  18. layui树形美化_使用layui-tree美化左侧菜单,点击生成tab选项
  19. 《2019测试面试题-上海悠悠.pdf》
  20. shell脚本中source和expert的简单理解

热门文章

  1. BootStrap table 传递搜索参数
  2. Java 用接口实现加减乘除计算器
  3. 【线性代数公开课MIT Linear Algebra】 第六课 AX=b与列空间、零空间
  4. 通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多系统的统一登录(数据库源码级)附源码...
  5. PowerShell 在 SharePoint 2010 自动化部署中的应用(2)-编译打包
  6. 最详细的equals和hashcode详解
  7. 软件测试系统学习流程和常见面试题
  8. Selenium 编写第一个自动化脚本
  9. cad插入块_CAD中的quot;块quot;能否修改?能!一个命令可快速解决
  10. 获取表情字符串的html,js:如何截取含有表情的字符串