动手学Task1

线性回归

主要内容包括:

1.线性回归的基本要素
2.线性回归模型从零开始的实现
3.线性回归模型使用pytorch的简洁实现

线性回归模型从零开始的实现

1.生成数据集

使用线性模型来生成数据集,生成一个1000个样本的数据集,下面是用来生成数据的线性关系:

p r i c e = w a r e a a r e a + w a g e a g e + b \mathrm{price} = w_{\mathrm{area}} \cdot \mathrm{area} + w_{\mathrm{age}} \cdot \mathrm{age} + b

2.读取数据集

3.初始化模型参数

4.定义模型

定义用来训练参数的训练模型:

p r i c e = w a r e a a r e a + w a g e a g e + b \mathrm{price} = w_{\mathrm{area}} \cdot \mathrm{area} + w_{\mathrm{age}} \cdot \mathrm{age} + b

5.定义损失函数

我们使用的是均方误差损失函数:
l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) y ( i ) ) 2 , l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2,

6.定义优化函数

在这里优化函数使用的是小批量随机梯度下降:

( w , b ) ( w , b ) η B i B ( w , b ) l ( i ) ( w , b ) (\mathbf{w},b) \leftarrow (\mathbf{w},b) - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{(\mathbf{w},b)} l^{(i)}(\mathbf{w},b)

7.训练

======================================================================

softmax和分类模型

内容包含:

  1. softmax回归的基本概念
  2. 如何获取Fashion-MNIST数据集和读取数据
  3. softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集中的图像数据进行分类的模型
  4. 使用pytorch重新实现softmax回归模型

softmax从零开始的实现

1.获取训练集数据和测试集数据

2.模型参数初始化

3.对多维Tensor按维度操作

4.定义softmax操作

y ^ j = exp ( o j ) i = 1 3 exp ( o i ) \hat{y}_j = \frac{ \exp(o_j)}{\sum_{i=1}^3 \exp(o_i)}

softmax回归模型

o ( i ) = x ( i ) W + b , y ^ ( i ) = softmax ( o ( i ) ) . \begin{aligned} \boldsymbol{o}^{(i)} &= \boldsymbol{x}^{(i)} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{y}}^{(i)} &= \text{softmax}(\boldsymbol{o}^{(i)}). \end{aligned}

5.定义损失函数

H ( y ( i ) , y ^ ( i ) ) = j = 1 q y j ( i ) log y ^ j ( i ) , H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},

( Θ ) = 1 n i = 1 n H ( y ( i ) , y ^ ( i ) ) , \ell(\boldsymbol{\Theta}) = \frac{1}{n} \sum_{i=1}^n H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ),

( Θ ) = ( 1 / n ) i = 1 n log y ^ y ( i ) ( i ) \ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)}

6.定义准确率

我们模型训练完了进行模型预测的时候,会用到我们这里定义的准确率。

7.训练模型

8.模型预测

现在我们的模型训练完了,可以进行一下预测,我们的这个模型训练的到底准确不准确。
现在就可以演示如何对图像进行分类了。给定一系列图像(第三行图像输出),我们比较一下它们的真实标签(第一行文本输出)和模型预测结果(第二行文本输出)。

==============================================================================

多层感知机

  1. 多层感知机的基本知识
  2. 使用多层感知机图像分类的从零开始的实现
  3. 使用pytorch的简洁实现

ReLU函数(常用)

ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素 x x ,该函数定义为

ReLU ( x ) = max ( x , 0 ) . \text{ReLU}(x) = \max(x, 0).

可以看出,ReLU函数只保留正数元素,并将负数元素清零。为了直观地观察这一非线性变换,我们先定义一个绘图函数xyplot。

Sigmoid函数

sigmoid函数可以将元素的值变换到0和1之间:

sigmoid ( x ) = 1 1 + exp ( x ) . \text{sigmoid}(x) = \frac{1}{1 + \exp(-x)}.

tanh函数

tanh(双曲正切)函数可以将元素的值变换到-1和1之间:

tanh ( x ) = 1 exp ( 2 x ) 1 + exp ( 2 x ) . \text{tanh}(x) = \frac{1 - \exp(-2x)}{1 + \exp(-2x)}.

我们接着绘制tanh函数。当输入接近0时,tanh函数接近线性变换。虽然该函数的形状和sigmoid函数的形状很像,但tanh函数在坐标系的原点上对称。
依据链式法则,tanh函数的导数

tanh ( x ) = 1 tanh 2 ( x ) . \text{tanh}'(x) = 1 - \text{tanh}^2(x).

下面绘制了tanh函数的导数。当输入为0时,tanh函数的导数达到最大值1;当输入越偏离0时,tanh函数的导数越接近0。

多层感知机

多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号,多层感知机按以下方式计算输出:

H = ϕ ( X W h + b h ) , O = H W o + b o , \begin{aligned} \boldsymbol{H} &= \phi(\boldsymbol{X} \boldsymbol{W}_h + \boldsymbol{b}_h),\\ \boldsymbol{O} &= \boldsymbol{H} \boldsymbol{W}_o + \boldsymbol{b}_o, \end{aligned}

其中 ϕ \phi 表示激活函数。

多层感知机从零开始的实现

1.获取训练集

2.定义模型参数

3.定义激活函数

4.定义网络

5.定义损失函数

6.训练

7.模型预测

总结

无论运用什么模型去做回归或者分类,都需要类似的步骤,只是其中的模型算法不同,但优化函数可以共用。

发布了5 篇原创文章 · 获赞 0 · 访问量 113

猜你喜欢

转载自blog.csdn.net/weixin_43535441/article/details/104316740