• 关于深度学习一些疑惑的总结


    1、GoogLeNet

    1)1x1卷积核的作用:

    1x1卷积的主要目的是为了减少维度,还用于修正线性激活(ReLU),
    栗子:上一层的输出为上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),
    输出数据为100x100x256,其中,卷积层的参数为128x5x5x256= 819200。
    若上一层输出先经过具有32个通道的1x1卷积层, 再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,
    但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,
    大约减少了4倍。
    未加入1x1卷积核
    在上图中没有加入1x1卷积核,若输入的通道数为192,从左至右在第一个卷积里面输出通道数为64,第二个为128,第三个为32,则有参数:
    (1x1x192x64)+(3x3x192x128)+(5x5x192x32)=387072
    最终输出的特征图为:64+128+32+192=416
    加入1x1卷积核
    在上图中,若加入了1x1的卷积核,
    则有:
    参数:(1x1x192x64)+(1x1x192x96+3x3x96x128)+(1x1x192x16+5x5x16x32)=157184
    最终输出的特征图:64+128+32+32=256

    2)Python中的*args和**kwargs的使用方式

    args是arguments的缩写,表示位置参数
    kwargs是keyword arguments的缩写,表示关键字参数
    以上是Python中可变参数的两种形式,并且args必须放在**kwargs的前面,因为位置参数在关键字参数的前面。
    args可以理解为变元的缩写,
    **kwargs理解为关键字变元的缩写
    各参数用于解压各自的变元类型,允许使用可变字长变元进行函数调用。
    “args”是一个标准化规范,但仍然只是一个名称。在
    args中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数
    “**kwargs”是双星号创建了字典,其内容是关键字参数,来自函数调用。
    使用
    args和**kwargs时,需要注意位置参数和关键字参数。
    **kwargs不能置于*args前,不然会报错

    2、感受野

    1)、概念:

    (Receptive Field),指的是神经网络中神经元能够感受到的输入区域,在卷积神经网络中,特征图谱上某个元素的计算受输入图像上某个区域的影响,这个区域就是该元素的感受野。
    由公式:
    M= [ (N - kernel_size + 2 * padding) / stride ] + 1
    注:
    M -> 输入尺寸
    N -> 输出尺寸
    kernel_size -> 卷积核大小
    padding -> 特征图填充宽度
    stride -> 卷积步长

    3、Conv2d()

    torch.nn.Conv2d(
    				in_channels,
    				out_channels,
    				kernel_size,
    				stride=1,
    				padding=0,
    				dilation=1,
    				groups=1,
    				bias=True,
    				padding_mode='zeros',
    				device=None,
    				dtype=None)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    in_channels: (int)输入图像中的通道数
    out_channels: (int) 卷积产生的通道数即输出图片的通道数
    lernel_size : (int or tuple) 卷积的步幅。默认值:1
    padding: (int,tuple or str, optional) 填充添加到输入的所有四个边。默认值为0
    padding_mode: (string,optinal) 填充的几个选择’zeros’,‘reflect’,‘replicate’或‘circular’。默认值:0
    dilation : (int or tuple ,optional) 内核元素之间的间距。默认值:1
    groups: (int,optional) 从输入通道到输出通道的阻塞连接数。默认值为1.
    bias : (bool,optional) 如果为真,则输入添加可学习的偏差。默认值为真。

    shape:
    shape

    4、torch.unsqueeze()

    torch.unsqueeze(tensor,dim,out=None)
    
    • 1

    作用:扩展维度------------> 返回一个新的张量,对输入的既定位置插入维度1
    注意:返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。
    --------------->如果dim为负,则将会被转化dim+input.dim()+1
    参数:
    tensor (Tensor): 输入张量
    dim (int):插入维度的索引
    out (Tensor, optional):结果张量

    5、JSON常见用法:json.load()、json.loads()、json.dump()、json.dumps()

    JSON的定义
    JSON指的是JavaScript对象表示法(JavaScript Object Notation)
    JSON是轻量级的文本数据交换格式
    JSON独立于语言
    JSON具有自我描述性,更易理解
    常用的方法:
    json.load()------>从json文件中读取数据
    json.loads()------>将str类型的数据转换为dict类型
    json.dumps()------>将sict类型的数据转成str,如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数
    json.dump()------->将数据以json的数据类型写入文件中

    6、Python assert(断言)

    Python assert(断言)用于判断一个表达式,在表达式条件为false的时候触发异常。
    断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况

    语法格式如下:

    assert expession
    
    • 1

    等价于

    if not expression:
    	raise AssertionError
    
    • 1
    • 2

    assert后面也可以紧跟参数:

    assert expression [,arguments]
    
    • 1

    等价于:

    if not expression:
    	raise AssertionError(arguments)
    
    • 1
    • 2

    7、python os.path.exists()

    os.path.exists(path)
    
    • 1

    作用:
    用于判断文件夹路径是否存在
    结果:
    如果路径path存在,返回True;如果路径path不存在,返回False

    8、pytorch中load和load_state_dict区别

    torch.load()
    
    • 1

    上述加载的是训练好的模型
    下面是栗子:

    torch.load("xxx.pth")
    
    • 1
    net.load_state_dict()
    
    • 1

    上述是net的一个方法 是将torch.load加载出来的数据加载到net中

    9、Torch.load()使用方式

    torch.load(f,
    			map_location=None,
    			pickle_module=<module 'pickle'from'PATH',
    			**pickle_load_args)
    
    • 1
    • 2
    • 3
    • 4

    作用:
    从文件加载中用torch.save()保存的对象。
    参数:
    f:------->类似文件的对象(必须实现read(),:menth’readline’,:meth’tell’和:meth’seek’),或者是包含文件的字符串。
    map_location:------->函数、torch.device或者字典指明如何重新映射存储位置。
    pickle_module:-------->用于unpickling元数据和对象的模板(必须匹配用于序列化文件的pickle_module).
    pick_load_args:--------->传递给pickle_module.load()和pickle_module.Unpickler()的可选关键字参数。
    使用:
    默认加载方式,使用CPU加载CPU训练得出的模型或者用GPU调用GPU训练的模型:
    torch.load('tensors.pt')

    将全部Tensor全部加载到GPU中:

    torch.load('tensors.pt',map_location=torch.device('cpu'))
    使用函数将所有张量加载到CPU(适用在GPU训练的模型在CPU上加载):
    torch.load('tensors.pt',map_location=lambda storage,loc:storage)
    将所有张量加载到第一块GPU(在CPU训练在GPU加载):
    torch.load('tensors.pt',map_location=lambda storage,loc:storage.cuda(1))
    将张量从GPU1映射到GPU0(第一块GPU训练,第二块GPU加载):
    torch.load('tensors.pt',map_location={'cuda:1':'cuda:0'})
    根据自身所用设备,将设备加载到自身设备:
    torch.load('modelparameters.pth',map_location = device)

  • 相关阅读:
    【Linux】进程控制基础知识
    停车场系统源码
    乌克兰的 IT 外包,为什么如此“发达”?
    图像变换算法
    Redis内存回收
    IntelliJ IDEA 2022.3正式发布,配置云同步&支持Redis好用到炸
    repo 命令
    中国节日主题网站设计 红色建军节HTML+CSS 红色中国文化主题网站设计 HTML学生作业网页
    npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3
    C#快速排序算法
  • 原文地址:https://blog.csdn.net/weixin_46178977/article/details/127577568