NNDL实验五前馈神经网络-二分类任务

Posted 刘先生TT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NNDL实验五前馈神经网络-二分类任务相关的知识,希望对你有一定的参考价值。

前言:附上kaggle连接,前馈神经网络实验,这次实验是使用Pytorch做神经网络,已经通过学习对前馈神经网络进行进一步的了解。这次实验主要是神经网络和对其进行二分类任务。大体思路是利用模型的构建步骤,构建数据集=>构建模型=>损失函数=>模型优化=>模型训练=>模型评估=>保存模型进行模型训练。

文章目录

4.1神经元

神经网络的基本组成单元为带有非线性激活函数的神经元,其结构如如图4.2所示。神经元是对生物神经元的结构和特性的一种简化建模,接收一组输入信号并产生输出。

4.1.1 净活性值

假设一个神经元接收的输入为 x ∈ R D x\\in R^D xRD,其权重向量为 w ∈ R D w\\in R^D wRD,神经元所获得的输入信号,即净活性值z的计算方法为
z = w T x + b ( 4.1 ) z=w^Tx+b (4.1) z=wTx+b(4.1)
其中 b b b为偏置。
为了提高预测样本的效率,我们通常会将个样本归为一组进行成批地预测。
z = X w + b ( 4.2 ) z=Xw+b (4.2) z=Xw+b(4.2)
其中 X ∈ R N × D X\\in R^N \\times D XRN×D N N N个样本的特征矩阵, z ∈ R N z\\in R^N zRN N N N个预测值组成的列向量。
使用pytorch计算一组输入的净活性值,代码如下:

import torch

# 2个特征数为5的样本
X = torch.rand(size=[2, 5])

# 含有5个参数的权重向量
w = torch.rand(size=[5, 1])
# 偏置项
b = torch.rand(size=[1, 1])

# 使用'torch.matmul'实现矩阵相乘
z = torch.matmul(X, w) + b
print("input X:", X)
print("weight w:", w, "\\nbias b:", b)
print("output z:", z)

【思考题】加权求和与仿射变换之间有什么区别和联系?

答: 根据我的理解和查阅资料可知,可能存在误解,欢迎指正
加权和:相当于降维的一种,即将多维数据根据其重要性进行求和降成一维数据。
仿射变换:又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。
联系:虽然两种解释是不同的,但是通过公式我们可以发现二者的计算过程是一样的。我认为加权和只是仿射变换的一维形式。即二维矩阵的第一个维度为一的情况下的仿射变换为加权和。就像深度学习中而利用神经网络进行二分类学习,最后一层隐藏层神经元和输出层神经元的关系一样。既可以当成加权和又可以当成仿射变换。
区别:加权和是一维数据进行处理。仿射变换则是二维数据,利用矩阵计算进行处理,在深度学习中的体现,加权和最终计算的是一个神经元的输入,仿射变换则对应的是一层神经元的输入。

拓展:仿射变化在图像变换中的应用:
仿射变换在图形中的变换包括:平移、缩放、旋转、斜切及它们的组合形式。这些变换的特点是:平行关系和线段的长度比例保持不变。

矩阵公式:

平移变换 [ x ′ y ′ 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] × [ x y 1 ] \\beginbmatrix x^'\\\\ y^'\\\\ 1 \\endbmatrix=\\beginbmatrix 1 & 0 &t_x \\\\ 0 & 1 &t_y \\\\ 0 & 0 & 1 \\endbmatrix \\times \\beginbmatrix x\\\\ y\\\\ 1 \\endbmatrix xy1 = 100010txty1 × xy1
t x , t y t_x,t_y tx,ty为x、y轴平移量的大小。
尺度变换 [ x ′ y ′ 1 ] = [ s 0 0 0 s 0 0 0 1 ] × [ x y 1 ] \\beginbmatrix x^'\\\\ y^'\\\\ 1 \\endbmatrix=\\beginbmatrix s & 0 & 0 \\\\ 0 & s & 0 \\\\ 0 & 0 & 1 \\endbmatrix \\times \\beginbmatrix x\\\\ y\\\\ 1 \\endbmatrix xy1 = s000s0001 × xy1
s s s为变化的倍数
斜切变换: [ p ′ 1 ] = [ A B 0 0 ] × [ p 1 ] \\beginbmatrix p^'\\\\ 1 \\endbmatrix=\\beginbmatrix A&B \\\\ 0&0 \\endbmatrix \\times \\beginbmatrix p\\\\ 1 \\endbmatrix [p1]=[A0B0]×[p1]
A 、 B A、B AB为x、y轴变换的自由度。
(温故而知新:激活函数在这里给神经网络带来了什么益处?最后给出答案)

4.1.2激活函数

净活性值 z z z再经过一个非线性函数 f ( ⋅ ) f(⋅) f()后,得到神经元的活性值 a a a

a = f ( z ) ,( 4.3 ) a=f(z),(4.3) a=f(z),(4.3
激活函数通常为非线性函数,可以增强神经网络的表示能力和学习能力。常用的激活函数有S型函数和ReLU函数。

4.1.2.1 Sigmoid型函数

Sigmoid 型函数是指一类S型曲线函数,为两端饱和函数。常用的 Sigmoid 型函数有 Logistic 函数和 Tanh 函数,其数学表达式为

Logistic 函数:
σ ( z ) = 1 1 + e x p ( − z ) ( 4.4 ) \\sigma(z)=\\frac11+exp(-z) (4.4) σ(z)=1+exp(z)1(4.4)
Tanh函数
t a n h ( z ) = e x p ( z ) − e x p ( − z

以上是关于NNDL实验五前馈神经网络-二分类任务的主要内容,如果未能解决你的问题,请参考以下文章

NNDL 实验六 卷积神经网络LeNet实现MNIST

NNDL 实验四 线性分类

下载 | Github 9.9K Star的《神经网络与深度学习》

第二节,TensorFlow 使用前馈神经网络实现手写数字识别

资源分享 | Github 9.9K Star的《神经网络与深度学习》

人工智能系列实验——搭建用于识别猫的二分类神经网络