《动手学深度学习》-小白笔记一

小白知识点

损失函数中的解分为两类:
  • 解析解:误差最小化问题的解可以直接用公式表达出来
  • 数值解:通过优化算法有限次迭代模型参数来尽可能降低损失函数的值
优化函数的两个步骤:
  1. 初始化模型参数,一般来说使用随机初始化。
  2. 我们在数据上迭代多次,通过在负梯度方向移动参数来更新每个参数.
两个向量相加的两种方法:
  1. 向量相加的一种方法是,将这两个向量按元素逐一做标量加法。

    timer = Timer()
    c = torch.zeros(n)
    for i in range(n):
        c[i] = a[i] + b[i]
    '%.5f sec' % timer.stop()
  2. 向量相加的另一种方法是,将这两个向量直接做矢量加法。

    timer.start()
    d = a + b
    '%.5f sec' % timer.stop()
     

    后者比前者运算速度更快。因此,我们应该尽可能采用矢量计算

softmax与线性回归的区别与联系:
  • softmax处理离散问题,线性回归处理连续问题,所以softmax主要处理分类问题。
  • softmax与线性回归的输入差不多,但是它的输出个数是标签的类别数。输出值表示该类别的预测概率。
  • softmax回归同线性回归一样,也是一个单层神经网络。由于每个输出o1,o2,o3的计算都要依赖于所有的输入x1,x2,x3,x4,softmax回归的输出层也是一个全连接层。
分类问题直接使用输出层的输出会产生两个问题:
  • 输出层的输出值的范围不确定,我们难以直观上判断这些值的意义
  • 真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
    softmax运算符解决了以上两个问题。它利用下式将输出值变换成值为正且和为1的概率分布
    在这里插入图片描述
多层感知机神经网络为什么要引入非线性变换?

我们先来看一种含单隐藏层的多层感知机的设计。
其输出O的计算为在这里插入图片描述

也就是将隐藏层的输出直接作为输出层的输入。如果将以上两个式子联立起来可以得到在这里插入图片描述

从联立后的式子可以看出,虽然神经网络引入了隐藏层,却依然等价于一个单层神经网络:其中输出层权重参数为WhWo,偏差参数为bhWo+bo。不难发现,即便再添加更多的隐藏层,以上设计依然只能与仅含输出层的单层神经网络等价。

几类激活函数
  • ReLU函数

    ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素xx,该函数定义为
    在这里插入图片描述
    可以看出,ReLU函数只保留正数元素,并将负数元素清零。

  • Sigmoid函数

    sigmoid函数可以将元素的值变换到0和1之间:在这里插入图片描述

  • tanh函数

    tanh(双曲正切)函数可以将元素的值变换到-1和1之间:
    在这里插入图片描述

利用pytorch生成多层网络的三种方法:

ways to init a multilayer network
# method one
net = nn.Sequential(
    nn.Linear(num_inputs, 1)
    # other layers can be added here
    )

# method two
net = nn.Sequential()
net.add_module('linear', nn.Linear(num_inputs, 1))
# net.add_module ......

# method three
from collections import OrderedDict
net = nn.Sequential(OrderedDict([
          ('linear', nn.Linear(num_inputs, 1))
          # ......
        ]))
摘抄

最后上一个摘抄了其他同学写的一个关于pytorch内部函数的小笔记:

  • torch.ones()/torch.zeros(),与MATLAB的ones/zeros很接近。初始化生成均匀分布
  • torch.rand(*sizes, out=None) → Tensor
    返回一个张量,包含了从区间[0,1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义。
  • 标准正态分布torch.randn(*sizes, out=None) →Tensor
    返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。
  • torch.mul(a, b)是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1,2),返回的仍是(1, 2)的矩阵
  • torch.mm(a, b)是矩阵a和b矩阵相乘,比如a的维度是(1, 2),b的维度是(2, 3),返回的就是(1, 3)的矩阵
  • torch.Tensor是一种包含单一数据类型元素的多维矩阵,定义了7种CPU tensor和8种GPU tensor类型。
  • random.shuffle(a):用于将一个列表中的元素打乱。shuffle() 是不能直接访问的,需要导入 random模块,然后通过random 静态对象调用该方法。
  • backward()是pytorch中提供的函数,配套有require_grad。所有的tensor都有.requires_grad这个属性,可以设置这个属性。
    x=tensor.ones(2,4,requires_grad=True)
  • 如果想改变这个属性,就调用tensor.requires_grad_()方法:
    x.requires_grad_(False)
存疑
  • 广播机制?
  • view()?
  • sys?
  • num_work?

等我搞清楚了回来更新,哈哈哈。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值