1. 机器学习的基本概念

其实无论是机器学习还是深度学习,很大程度上,我们都是为了"预知未来"。
再机器学习的时候,我们经常需要依赖某个领域的专家来做特征提取,或者直接预测。(更加依赖专家)
但是在深度学习中,我们可以建立一个模型,让这个模型学习某些知识,成为专家。然后再去做预测。
算法:根据历史数据实现预测的计算步骤或者计算方法
机器学习:使用计算机实现算法,是的计算机可以学习数据,经验并实现预测或者得出结果。
随着 算力,数据,算法的发展,深度学习越来越流行了。

机器学习的可解释性是很强的,但是深度学习算法的可解释性相对较差。

1.1 样本、特征、标签

机器学习中:
标签:目标变量,比如鸢尾花的类型,红酒的种类。
样本:所有的输入数据或者所有给定的数据。
特征:输入的数据的列。通常一列代表一个特征。

深度学习中:
通常输入都是高纬度的Tensor,我们认为一个索引对应的对象就是一个样本。
比如结构[32,1,28,28] 实际就是32个,1 * 28 * 28的三位矩阵,构成了四维矩阵。每一个我们能用索引出来的对象,就是一个样本输入。很多时候,我们的样本输入都是高纬度的。
深度学习中,输入往往是三维,四维。(图像,视频等)

1.1 分类与回归

机器学习往往用来解决的问题,主要分为两类:分类和回归。
分类:结果是有限个数据。(不连续数据,离散数据)
回归:结果可能是无穷个。(联系数据)

1.2 有监督学习和无监督学习

有监督学习:有标签的。
没有标签的:聚类分析,协同过滤(推荐系统的核心)等。许多时候,我们用来作为辅助算法,增强有监督学习的学习效果。可以帮我们提取特征,特征工程。

1.3 如何判断一个模型是好模型

模型评估三角形:
在这里插入图片描述
模型效果:有些时候,我们需要效果达到100%。比如人脸识别,判断是否有癌症等。

神经网络的一个方向:提升运算速度。

2. 理解Pytorch框架

pytorch是Torch库的python版本,所以我们import的时候,是引入的torch.
学习过程,很多时候,我们是理解网络,然后整合不同的网络解决我们的问题。
在这里插入图片描述

3. 线性回归

线性回归算法基本算是深度学习中最简单的算法。跟我们初中学习的方程一样,只是我们是多元一次方程。
在这里插入图片描述
更加的,我们学完矩阵的时候,我们可以把该方程写成矩阵的方式。
在机器学习中,我们默认所有的一维向量都是列向量。
在这里插入图片描述
线性回归的任务就是预测一个函数,来映射输入标签和输出的关系。因为是线性回归,所以就是对直线拟合的过程。就是我们所说的模型。而构造这个模型的核心,就是求解W的过程。
(就是使用 已经给定的y和x,通过求解一个w来拟合y和x的关系)
在这里插入图片描述

3.1 矩阵乘法

养成习惯,创建torch对象的时候,都直接指定dtype

矩阵的乘法使用 torch.mutual或者@
最好在创建的时候,就直接写上dtype,这样效率更高
import torch

X = torch.Tensor([[1, 1, 2], [1, 3, 4], [1, 1, 1], [1, 2, 3]])
w = torch.Tensor([1, 1, 1])

x1 = torch.tensor([1, 2, 3], dtype=torch.float)

def LinearR(x, w):
    return torch.matmul(x, w)

def LinearR1(x, w):
	return x @ w
print(LinearR(X, w))

torch.nn包含两个模块,一个nn.Module,包含神经网络的各种层。
nn.function 神经网络的各种激活函数和损失函数。
在这里插入图片描述
比如 torch.nn.Linear 就实现了我们的 矩阵乘法(X @ w)。

3.2 使用torch.nn 实现最简单的正向传播

当我们调用nn.Module模块下的内容时,都会自动的生成随机的w和b。也就是说,我们只需要传递X即可。

import torch
import torch.nn as nn

X = torch.tensor([[1, 2], [3, 4],[5,6], [7, 8]], dtype=torch.float)
torch.random.manual_seed(0)
# 建立线性层, 会默认随机初始化权重和偏置
linear = nn.Linear(2, 1)
# 查看权重和偏置
weights, bias = linear.weight, linear.bias
# Q: 因为权重和偏置都是随机的,那么我应该怎么才能固定权重和偏置呢?
# 第五行,设置随机数种子

print(weights, bias)
output = linear(X)
print(output)

这就实现了最简单的前向传播。
其实前向传播就是计算从输入到输出的过程。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐