深度学习

机器学习、深度学习和计算机视觉是互相关联的概念,它们在人工智能领域具有重要地位。

首先,机器学习是一种人工智能领域的技术,它致力于设计和开发能够自动学习的算法和模型。通过从大量数据中学习和找出规律,机器学习使得计算机能够识别模式、预测结果和做出决策。

深度学习是机器学习的一个分支,它模仿人脑神经网络的结构和工作原理,通过构建深层次的神经网络来提取高级抽象特征并进行学习。深度学习的关键是深度神经网络,这种网络结构能够通过多层非线性变换来学习和表示复杂的数据特征。

计算机视觉是利用计算机和机器学习的方法来实现对图像和视频的理解和分析。计算机视觉旨在使计算机能够“看”和“理解”图像或视频内容。深度学习在计算机视觉领域具有广泛应用,通过深度神经网络进行图像识别、目标检测、图像分割等任务,大大提高了计算机视觉的准确度和效果。

因此,机器学习是一个广泛的概念,深度学习是机器学习的一种方法,而计算机视觉则是应用了机器学习和深度学习技术的一个具体领域。它们相互关联,在人工智能的发展中扮演着重要的角色。

深度学习应用领域

  • 图片分类
  • 物体检测和分割
  • 样式迁移
  • 人脸合成
  • 文字生成图片
  • 文字生成
  • 无人驾驶

安装

1
2
conda activate opencv
conda install d2l pytorch torchvision

数据操作

  • 张量(tensor)

    torch.tensor() 是 PyTorch 库中的一个函数,用于创建多维张量(tensor)。张量是一个多维数组,类似于 NumPy 中的数组,但可以在 GPU 上运行,从而加速数值计算。

    torch.tensor() 函数可以接受各种类型的输入,并将其转换为张量。例如,你可以将一个列表、一个 NumPy 数组或者一个标量作为参数传递给 torch.tensor(),它将返回一个相应的张量。

    下面是一些示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import torch

    # 创建一个空的浮点型张量
    x1 = torch.tensor([])

    # 使用 Python 列表创建一个整型张量
    x2 = torch.tensor([1, 2, 3])

    # 使用 NumPy 数组创建一个浮点型张量
    import numpy as np
    x3 = torch.tensor(np.array([1.0, 2.0, 3.0]))

    # 创建一个指定形状和数据类型的张量
    x4 = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)

    在上面的示例中,torch.tensor() 函数根据输入的数据类型自动确定创建的张量的数据类型,并返回相应的张量。

  • 创建数组

    • 形状
    • 每个元素的数据类型
    • 每个元素的值
  • 访问元素
    二维数组中:
    一个元素:[1,2] 左行右列
    一行:[1,:]
    一列:[:,1]
    子区域:[1:3,1:] 1:3前闭后开,取1,2
    子区间:[::3,::2] 行每3个一跳,列每2个一跳

  • 数组操作实现
    张量表示一个数值组成的数组,这个数组可能有多个维度
    通过张量的shape()属性来访问张量的形状和张量中的元素个数,numel()属性表示元素总数
    reshape()改变一个张量的形状不改变元素数量和元素值

    1
    2
    x = torch.arange(12)
    x = x.reshape(3, 4)

​ 常见算术运算符(+, -, , /, *) **是求幂运算
torch.exp(x)指数运算

  • 多个张量连接一起
    1
    2
    torch.cat((X, Y), dim=0)#dim=0按行添加
    torch.cat((X, Y), dim=1)#dim=按列添加
  • 通过逻辑运算符构建二元张量
    1
    X == Y
  • 对张量中所有的元素求和会得到中有一个元素的张量
  • 即使形状不同,我们仍可以调用广播机制来执行按元素操作

​ a张量

0
1
2

b张量

0 1
1
a + b 
0 1
1 2
2 3
  • 可以用[-1]选择最后一行,可以用[1:3]选择第一行和第三行
  • 运行 Y = Y + X 会导致结果分配新的内存,Z[:] = X + YX += Y不会
1
before = id(Y)

数据预处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os
import pandas as pd
import torch

os.makedirs(os.path.join('..', 'data'), exist_ok=True) # 创建文件夹
data_file = os.path.join('..', 'data', 'house_tiny.csv') # data文件夹下创建csv文件,csv文件类似于表格,第一行是属性,随后是值
with open(data_file, 'w') as f:
f.write('NumRooms, Alley, Price\n') # 列名
f.write('NA,Pave,127500\n') # 值,逗号后不能有空格
f.write('2,NA,106000\n') # NA,计算机中是NaN,表示未定义或不可表示的值
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')

data = pd.read_csv(data_file)
print(data)

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] # 截取前两列,截取第三列,[]前闭后开
inputs = inputs.fillna(inputs.mean()) # 将inputs数字列的均值赋给NaN
print(outputs)

inputs = pd.get_dummies(inputs, dummy_na=True) # 将一列中不同分成多个属性列,有值为1,无值为0


X, Y = torch.tensor(inputs.values), torch.tensor(outputs.values) # 转为张量
print(X, Y)