天天看点

深度学习的一些小记录里面有一部分是摘录

里面有一部分是摘录

1. dim函数的部分理解

tf.nn.functional.softmax(x,dim = -1)

中的参数

dim

是指维度的意思

dim = 0, 对每一维度相同位置的数值进行softmax运算

dim = 1, 对某一维度的列进行softmax运算

dim = 2, 对某一维度的行进行softmax运算

dim = -1, 对某一维度的行进行softmax运算

2. enumerate的使用:

将可迭代对象如字符串、列表、元组、字典、集合,组合成索引+数据格式输出,第一个参数为可迭代对象,第二个参数为索引起点
for index, s in enumerate('Hello', 1):  # 1表示index从1开始
    print('第{}个字符是{}'.format(index, s))
           

运行结果:

深度学习的一些小记录里面有一部分是摘录

3.Linear的理解

  • 1 . Linear 是module的子类,是参数化module的一种,与其名称一样,表示着一种线性变换
  • 2.Linear的创建需要两个参数,inputSize 和 outputSize:

    inputSize:输入节点数

    outputSize:输出节点数

  • 3.Linear中包含四个属性 y=Ax+b

    – in_features: 上层神经元个数,指的是输入的二维张量的大小

    – out_features: 本层神经元个数,指的是输出的二维张量的大小

    – weight:权重, 形状[out_features , in_features]

    – bias: 偏置, 形状[out_features]

  • 4.nn.Module 是所有神经网络单元(neural network modules)的基类
  • 5.pytorch在nn.Module中,实现了

    __call__

    方法,而在

    __call__

    方法中调用了forward函数**\

4. 常见激活函数的理解:

  1. 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性直接传递到下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。
  2. 通过激活函数的加入可以学到非线性的关系,这对于特征提取具有更强的能力
  3. 所有的非线性激活函数(nn.ReLU、nn.sigmoid、nn.tanh、nn.LeakyReLU(negative_slope=0.01, inplace=False)),基类都是

    nn.Module

    , 都实现

    __call__

    forward

  4. 深度学习的基本原理就是基于人工神经网络,信号从一个神经元进入,经过非线性的 activation function,传入到下一层神经元;再经过该层神经元的 activate,继续往下传递,如此循环往复,直到输出层。正是由于这些非线性函数的反复叠加,才使得神经网络有足够的 capacity来抓取复杂的pattern,在各个领域取得 state-of-the-art 的结果
  5. softmax的输入是T*1的向量,输出也是T*1的向量,只不过输出的向量的每个值的大小范围为0到1。softmax的输出向量的意思了,就是概率,该样本属于各个类的概率!,softmax 函数,又称为归一化指数函数。它是二分类函数 Sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来

5.零散记录

  1. 沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值
  2. 要停止跟踪历史记录(和使用内存),您还可以将代码块使用 with torch.no_grad(): 包装起来。在评估模型时,这是特别有用,因为模型在训练阶段具有 requires_grad = True 的可训练参数有利于调参,但在评估阶段我们不需要梯度
  3. with torch.no_grad()

    的作用域中定义的都是不进行梯度计算的张量
  4. torch.nn.Sequential 这个函数的作用是将一系列的运算模块按顺序搭建成一个多层的神经网络,值得注意的是,Sequential 里面的层次并不与神经网络的层次严格对应,而是指多步的运算,它与动态计算图的层次相对应
  5. 维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量
    1. 1 # 形状为[],零维
    2. [1,2,3] # 形状为[3],一维
    3. [[1,2],[3,4]] # 形状为[2,2],二维
    4. [[[1,2],[3,4]],[[1,2],[3,4]]] # 形状为[2,2,2],三维
  6. seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同
  7. 在卷积神经网络的卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定,BatchNorm2d()函数数学原理如下:

深度学习的一些小记录里面有一部分是摘录
  • BatchNorm2d()内部的参数如下:
    • 1.num_features:一般输入参数为batch_sizenum_featuresheight*width,即为其中特征的数量
    • 2.eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5
    • 3.momentum:一个用于运行过程中均值和方差的一个估计参数(我的理解是一个稳定系数,类似于SGD中的momentum的系数)
    • 4.affine:当设为true时,会给定可以学习的系数矩阵gamma和beta
  1. 所谓的 Dropout ,是指随机的将网络中的神经元归零,这种策略可以有效的防止过拟合
  2. _, predicted = torch.max(outputs.data, 1)的理解: _, predicted = torch.max(outputs.data, 1)的理解

继续阅读