动手学习深度学习

0x 0学习目录

  • python语法
  • 数据操作
  • 线性代数
  • 线性回归
  • Softmax回归+损失函数+图片分类

后续学习可能需要补充的知识

  • 矩阵论

0x 1 Python语法

with关键字

  • Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。

  • with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。

backward()函数的理解

(25条消息) pytorch中backward()函数详解_backward函数_Camlin_Z的博客-CSDN博客

yield关键字的理解

(25条消息) python中yield的用法详解——最简单,最清晰的解释_python yield_冯爽朗的博客-CSDN博客

张量索引

features = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
labels = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

batch_indices = torch.tensor([1, 3, 5])

selected_features = features[batch_indices] # tensor([1, 3, 5])
selected_labels = labels[batch_indices] # tensor([1, 1, 1])

*的含义

Q

def load_array(data_arrays,batch_size,is_train=True):
    """构造一个PyTorch的数据迭代器"""
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset,batch_size,shuffle=is_train)

其中,*data_arrays是什么意思

A

data_arrays是一个由多个张量组成的元组,这些张量包含了数据集中的特征和标签数据。在Python中,*被称为可变位置参数,它可以将一个元组或列表展开成独立的位置参数。在这里,*data_arrays将元组中的每个张量作为单独的参数传递给了TensorDataset构造函数。

举个例子,如果我们有以下张量:

features = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
labels = torch.tensor([1.0, 2.0, 3.0])

那么调用TensorDataset(*data_arrays)就相当于调用TensorDataset(features, labels)。这样,我们就可以使用PyTorch提供的数据集和数据迭代器来高效地读取和处理大规模数据集。

load_array函数中,我们首先通过TensorDataset将特征和标签数据组合成一个dataset对象。然后,我们使用DataLoader来创建一个迭代器,每次迭代时可以返回一个大小为batch_size的小批次数据。如果is_train为True,则打乱数据集顺序以增加随机性(即使特征和标签依然是匹配的)。这里的返回结果就是一个PyTorch数据迭代器,可以用于训练和测试深度学习模型。

以下的两种写法是一样的

  • 写法1:
file = open('./test_runoob.txt', 'w')
try:
    file.write('hello world')
finally:
    file.close()
  • 写法2:
with open('./test_runoob.txt', 'w') as file:
    file.write('hello world !')

torchvision库

pytorch对计算机视觉实现的库

y_hat[[0, 1], y] 一种简写

y = torch.tensor([0, 2])
y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])
y_hat[[0, 1], y] # 输出的解释: 第0个组的第0号元素,第1个组的2号元素

output:

tensor([0.1000, 0.5000])

广播机制

code:

import numpy as np

# 创建两个不同形状的ndarray数组
a = np.array([1, 2, 3])
b = np.array([[4], [5], [6]])

# 使用广播机制进行加法运算
c = a + b
print(c)

output:

array([[5, 6, 7],
       [6, 7, 8],
       [7, 8, 9]])

数组a自动广播为一个(3, 3)的数组,其中的每一行都是原始数组a。数组b也被广播为一个(3, 3)的数组,其中的每一列都是原始数组b。然后我们对这两个数组进行了加法运算,得到了一个最终的(3, 3)的输出数组。这就是广播机制的工作方式,它使得我们可以对不同形状和大小的数组执行相同的数学运算操作

0x 2数据操作

N维数组

image-20230423102655059

image-20230423102712809

image-20230423102800722

image-20230423102820736

  • [1:3,1:]的意思是
    • 从第1行到第2行
    • 从第1列到最后一列
  • [::3,::2]的意思是
    • 从第0行到最后一行,步长为3 行定位
    • 从第0列到最后一列,步长为2列定位

仓库里面还有jupyter notebook可以看代码的讲解。

0x 2线性代数-下面只记录 不太清楚/忘记/有别名 的概念

范数

未命名文档(10)_20_1682240317289

暂且理解下面的不等式 类比勾股定理

image-20230423170039416

置换矩阵

image-20230423170723670

image-20230423170711424

哈达玛积

image-20230424090101577

其中,A、B都张这样:

image-20230424090228191

讲矩阵导数时遇到的一些奇奇怪怪的东西:

  • 不可导点处,假装它可导

image-20230424100902679

  • 梯度/对向量求导(零基础入门系列当中也有讲过)

image-20230424101327209

image-20230424101505648

image-20230424101552092

  • 链导法

image-20230424103410413

  • 计算图(方便计算机来做求导运算)

image-20230424103652967

image-20230424103800619

上面的是显式构造,下面的是隐式构造

image-20230424104120651

线性回归

盘代码逻辑

未命名文档(10)_21_1683167816691

Softmax回归+损失函数+图片分类

它能解决什么问题?e.g.

image-20230503111030180

softmax回归

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g7ZFKshU-1688113711187)(https://zh.d2l.ai/_images/softmaxreg.svg)]

Screenshot_20230504_155500_com.jideos.jnotes

损失函数

img

Softmax代码的实现步骤

  1. 拿到测试集、训练集 by d2l.load_data_fasion_mnist
  2. 将3d(channel、length、height)的图片(1*28*28)拉成一个向量784*1,使用softmax回归
  3. 定义权重 W、b
  4. 定义Softmax操作(其实和线性回归没啥区别,softmax输出是个vector但是linear输出是一个scalar)
  5. 实现交叉熵损失函数
  6. 预测正确的数量统计 (没懂)
  7. 评价精度 (6与7之间的关系是什么?)
  8. 整合

交叉熵

what

  • 比较两个模型之间的差异

  • 两个模型

    • 都是高斯分布 => 可以直接比较
    • 一个高斯分布,另一个泊松分布 =>没法直接比较

    #todo继续学习交叉熵视频

多层感知机

  • 解决单层感知机的若干问题,例如无法解决XOR问题

模型选择 + 过拟合和欠拟合

image-20230510142003427

image-20230510142052521

image-20230510142347100

image-20230510142544394

image-20230510142730775

image-20230510143018383

为什么那个地方是最优的?

  • 泛化误差尽量小
  • 两根曲线的差距也要尽量小

image-20230510143303200

权重衰退

前置知识-L1、L2正则化

image-20230513102540390

image-20230513102554100

What?

  • 处理过拟合的方法

How?

  • 硬性限制

    • image-20230513100125030
  • 柔性限制

    • image-20230513101239588
  • 参数更新

    • image-20230513110825159
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值