关于深度学习代码中一些疑惑的总结

Posted 是一个小迷糊吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于深度学习代码中一些疑惑的总结相关的知识,希望对你有一定的参考价值。

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卷积核,若输入的通道数为192,从左至右在第一个卷积里面输出通道数为64,第二个为128,第三个为32,则有参数:
(1x1x192x64)+(3x3x192x128)+(5x5x192x32)=387072
最终输出的特征图为:64+128+32+192=416

在上图中,若加入了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)

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:

4、torch.unsqueeze()

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

作用:扩展维度------------> 返回一个新的张量,对输入的既定位置插入维度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

等价于

if not expression:
	raise AssertionError

assert后面也可以紧跟参数:

assert expression [,arguments]

等价于:

if not expression:
	raise AssertionError(arguments)

7、python os.path.exists()

os.path.exists(path)

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

8、pytorch中load和load_state_dict区别

torch.load()

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

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

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

9、Torch.load()使用方式

torch.load(f,
			map_location=None,
			pickle_module=<module 'pickle'from'PATH',
			**pickle_load_args)

作用:
从文件加载中用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)

以上是关于关于深度学习代码中一些疑惑的总结的主要内容,如果未能解决你的问题,请参考以下文章

卷积层里的填充Padding和步幅Stride 动手学深度学习v2 pytorch

深度学习:《PyTorch入门到项目实战》卷积神经网络:填充(padding)和步幅(stride)

文件路径中双星 (**) 的含义

深度学习中CNN的窗口大小如何选择?

201671010139 徐楠 关于学习方面的一些疑惑

关于学习C#泛型委托过程中发现的一些疑惑,大家一起讨论下