动手学深度学习-准备基础

本文介绍了深度学习的基础知识,包括起源、发展和特点,以及机器学习与深度学习的关系。并详细讲解了动手学深度学习所需预备的知识,如算法操作、索引、形状变换、线性函数、广播机制、内存开销、Tensor与NumPy的转换,以及自动求梯度的概念和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动手学深度学习

基础知识:

在这里插入图片描述

第1章:深度学习背景

时间快,这块不是重点;要把动手编程变为重点。

机器学习是一门讨论各式各样的适用于不同问题函数形式,以及如何使用数据来有效地获取函数参数具体值的学科。深度学习是指机器学习中的一类函数,它们的形式通常为多层神经网络

起源:

自然法则,是从数据回归到自然定律,可以用线性模型完美表达的。(发现自然定律的过程,也可以认为是深度学习的过程。)

对于深度学习的认识,可以认为是数据分析的高度解读,将数据回归到规律上的过程。

赫布理论是感知机学习算法的原型,并成为随机梯度下降算法的基石:强化合意的行为、惩罚不合意的行为,最终获得优良的神经网络参数。

神经网络核心原则:
  • 交替使用线性处理单元与非线性处理单元,它们经常被称为“”。
  • 使用链式法则(即反向传播)更新网络的参数。
发展:
  • 优秀的容量控制方法,如丢弃法,靠在整个网络中注入噪声而达到的,如训练时随机将权重替换为随机的数字。
  • 注意力机制,使用了一个可学习的指针结构来构建出一个精妙的解决方法;(其在像机器翻译这样的任务中记忆整个句子,不如记忆指向翻译的中间状态的指针);这样容量储存空间会更大。
  • 记忆网络和神经编码器—解释器这样的多阶设计使得针对推理过程的迭代建模方法变得可能(允许重复修改深度网络的内部状态,好像处理器在计算过程中修改内存一样)
  • 生成对抗网络的发明 ,将采样部分替换成了任意的含有可微分参数的算法。这些参数将被训练到使辨别器不能再分辨真实的和生成的样本。(生成奔跑的斑马和生成名流的照片 )
特点
机器学习和深度学习的关系:
  • 机器学习研究如何使计算机系统利用经验改善性能
  • 深度学习是具有多级表示表征学习方法;表征学习关注如何自动找出表示数据的合适方式,以便更好地将输入变换为正确的输出。

深度学习模型也可以看作是由许多简单函数复合而成的函数。(通过多函数来表达复杂的变换)

端到端训练:

不是将单独调试的部分拼凑起来组成一个系统,而是将整个系统组建好之后一起训练。(自动优化的逐级过滤器)。

当数据多的时候,可以采用无参数模型(因为完全可以通过大数据来学习)

当数据少的时候,可以简化对现实的假设来得到实用的模型,采用含参数模型。

第2章:动手学深度学习的预备知识

知道如何使用笔记本运行代码

算法操作:
import torch
import numpy as np
#创建随机初始化的Tensor
x1 = torch.rand(5, 3)
print("随机初始化的Tensor:\n{}\n".format(x1))

#创建long型全为0的Tensor
x2 = torch.zeros(5, 3, dtype=torch.long)
print("long型全为0的Tensor:\n{}\n".format(x2))

#直接根据数据来构建的Tensor
x3 = torch.tensor([5.5, 3.3])
x4 = torch.tensor(np.array([5.5, 3.3]))
print("直接根据数据来构建的Tensor:\n{}\n".format(x3))
print("直接根据数据来构建的Tensor(numpy形式):\n{}\n".format(x4))

#通过先有Tensor来构建的Tensor
x = x2.new_ones(5, 3, dtype=torch.float64) 
print("通过先有Tensor来构建的Tensor:\n{}\n".format(x))

#指定新的数据类型;本来是ones,给变成random形式了
x= torch.randn_like(x, dtype=torch.float)
print("指定新的数据类型:\n{}\n".format(x))

y = torch.rand(5, 3)
print("y and x + y ")
print("y={}".format(y))
print("x + y ={}".format(x + y))

#通过先有Tensor来构建的Tensor
x = x2.new_ones(5, 3, dtype=torch.float64) 
print("通过先有Tensor来构建的Tensor:\n{}\n".format(x))

#指定新的数据类型;本来是ones,给变成random形式了
x= torch.randn_like(x, dtype=torch.float)
print("指定新的数据类型:\n{}\n".format(x))

#输出Tensor形状
print(x.size())
print(x.shape)

#修改Tensor的值
x = x2.new_ones(5, 3, dtype=torch.float64) 
print("通过先有Tensor来构建的Tensor:\n{}\n".format(x))
x[1][2] = 2
print("修改后的Tensor:\n{}\n".format(x))

#求导
x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True)
out = x.pow(4).sum()
out.backward()
x.grad

结果:

随机初始化的Tensor:
tensor([[0.2630, 0.5941, 0.1872],
        [0.1692, 0.8500, 0.2259],
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值