NNDL实验五前馈神经网络-二分类任务
Posted 刘先生TT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NNDL实验五前馈神经网络-二分类任务相关的知识,希望对你有一定的参考价值。
前言:附上kaggle连接,前馈神经网络实验,这次实验是使用Pytorch做神经网络,已经通过学习对前馈神经网络进行进一步的了解。这次实验主要是神经网络和对其进行二分类任务。大体思路是利用模型的构建步骤,构建数据集=>构建模型=>损失函数=>模型优化=>模型训练=>模型评估=>保存模型进行模型训练。
文章目录
4.1神经元
神经网络的基本组成单元为带有非线性激活函数的神经元,其结构如如图4.2所示。神经元是对生物神经元的结构和特性的一种简化建模,接收一组输入信号并产生输出。
4.1.1 净活性值
假设一个神经元接收的输入为
x
∈
R
D
x\\in R^D
x∈RD,其权重向量为
w
∈
R
D
w\\in R^D
w∈RD,神经元所获得的输入信号,即净活性值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
X∈RN×D为
N
N
N个样本的特征矩阵,
z
∈
R
N
z\\in R^N
z∈RN为
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
⎣
⎡x′y′1⎦
⎤=⎣
⎡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
⎣
⎡x′y′1⎦
⎤=⎣
⎡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
[p′1]=[A0B0]×[p1]
A
、
B
A、B
A、B为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 函数: 以上是关于NNDL实验五前馈神经网络-二分类任务的主要内容,如果未能解决你的问题,请参考以下文章 下载 | Github 9.9K Star的《神经网络与深度学习》 第二节,TensorFlow 使用前馈神经网络实现手写数字识别
σ
(
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