如何制作神经网络:架构、参数和代码

已发表: 2021-02-12

顾名思义,神经网络是神经元的电路。 有不同类型的神经网络。 生物神经网络由真实的生物神经元组成。 而人工神经网络(ANN)是一个基于生物神经网络的系统,就像存在于大脑中一样。 大脑中估计的神经元数量约为 1000 亿个,它们通过电化学信号进行交流。

ANN 试图重现生物神经元中存在的计算复杂性,但它无法与之相比,它们是生物神经网络的更简单和不复杂的版本。 在本文中,我们将了解 ANN 的结构并学习如何使用 Python 创建神经网络。

目录

神经网络架构

人工神经网络由人工神经元组成,人工神经元也称为“节点”。 这些节点相互连接,从而创建网络或网格。 这些相互连接的强度被赋予一个值。 该值介于 -1 到 1 之间。

如果连接的值很高,则表明这些节点之间的连接很强。 每个节点都有其特有的功能。 改变这个函数将改变神经网络的行为和复杂性。 ANN中的神经元分为三种类型,输入节点、隐藏节点和输出节点,如下图所示:

资源

输入节点负责接收一般为数值或表达式形式的信息。 该信息以激活值的形式呈现,其中每个节点都有一个数字,数字越大,激活越大。
信息进一步通过网络传递。 基于节点连接权重和与特定层的某些神经元有关的激活函数,信息从一个神经元传递到另一个神经元。 每个节点在接收时添加激活值,这些值根据传递函数进行修改。
信息在整个网络中流动,通过隐藏层,直到到达输出节点。 输出节点非常重要,因为它们以有意义的方式向外界反映输入。 在这里可以看到神经网络的一个惊人的方面,它导致每个层和节点的权重调整。

预测值与实际值(误差)之间的差异将向后传播。 因此,神经网络将从所犯的错误中学习,并尝试根据指定的学习率方法调整权重。

因此,通过调整隐藏层数、每层神经元数、权重更新策略和激活函数等参数,我们可以创建神经网络。

定义参数

激活函数

根据手头的问题,可以在神经网络中使用各种激活函数。

激活函数是每个神经元都有的数学方程。 它决定了神经网络的输出。
该激活函数附加到网络中的每个神经元,并确定是否应该激活它,这取决于该特定神经元的激活是否有助于在输出层得出相关预测。 不同的层可以附加不同的激活函数。 激活函数还有助于将每个神经元的输出标准化到 1 到 0 或 -1 到 1 之间的范围。

现代神经网络使用一种称为反向传播的重要技术通过调整权重来训练模型,这会增加激活函数及其导数函数的计算压力。

激活函数的工作
缺失链接

激活函数有 3 种类型:
二进制- x<0 y=0 , x>0 y=1
线性 - x=y
非线性 - 各种类型:Sigmoid、TanH、Logistic、ReLU、Softmax 等。

来源:博客

类型:ReLU
缺失链接

算法

神经网络有多种类型,但通常分为前馈和反馈(反向传播)网络。

1)前馈网络是一个包含输入、输出和隐藏层的非重复网络; 因为信号只能向一个方向移动。 输入数据被传输到执行计算的处理设备层。 每个处理因子根据输入的权重进行计算。 计算新值,然后将新输入值馈送到下一层。

这个过程一直持续到它通过所有层并确定结果。 限制传递函数有时用于测量输出层中的神经元输出。 前馈网络被称为并包括感知器(直接和间接)网络。 前馈网络通常用于数据挖掘。

2)反馈网络(例如,循环神经网络或RNN)具有追溯机制,这意味着它们可以使用陷阱/循环使信号在两个方向上移动。 允许神经元之间所有可能的通信。

由于这种类型的网络中存在环路,因此它成为一个不断变化的非线性系统,直到达到稳定状态。 当网络正在寻找一组好的连接对象时,反馈网络通常用于与性能问题相关的记忆。

训练

前馈传递意味着给定输入并加权如何计算输出。 训练完成后,我们只运行前向传递来形成预测。

但是我们首先要训练我们的模型以真正学习权重,因此训练过程如下:

  1. 随机选择并初始化所有节点的权重。 TensorFlow 和 Keras (Python) 中内置了智能初始化方法。
  2. 对于每个训练示例,使用当前权重执行前向传递,并计算从左到右的每个节点的输出。 最终输出是最后一个节点的值。
  3. 将最终输出与训练数据中的实际目标进行比较,并使用损失函数测量误差。
  4. 执行从右到左的反向传递,并使用反向传播将上一步中计算的误差传播到每个单独的节点。
  5. 计算每个神经元对误差的权重贡献,并使用梯度下降相应地调整连接的权重。 从最后一层向后传播误差梯度。

神经网络的 Python 代码

现在我们从理论上了解了神经网络是如何制作的,让我们使用 Python 来实现它。

Python 中的神经网络
我们将使用带有 Tensorflow 或 Theano 后端的 Keras API 来创建我们的神经网络。

安装库
西阿诺
>>> pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git

TensorFlow 和 Keras
>>> pip3 安装张量流
>>> pip install –升级 Keras

导入库

导入 keras
从 keras.models 导入顺序
从 keras.layers 导入密集

初始化人工神经网络

模型=顺序()

创建输入和隐藏层-

model.add(Dense(input_dim = 2, units = 10, activation='relu', kernel_initializer='uniform'))

此代码将输入层和一个隐藏层添加到顺序网络
Dense():让我们创建一个密集连接的神经网络
input_dim:输入层中节点的形状或数量
units:当前层(隐藏层)的神经元或节点数
激活:应用于每个节点的激活函数。“relu”代表整流线性单元
kernel_initializer:层的初始随机权重

第二隐藏层
model.add(Dense(units = 20, activation='relu', kernel_initializer='uniform'))

该代码创建另一个隐藏层并将其添加到具有 20 个节点和“校正线性”激活函数的模型中。 根据问题和复杂性,可以以类似的方式添加更多层。

输出层
model.add(Dense(units = 1, activation='sigmoid', kernel_initializer='uniform'))

具有 Sigmoid 或 softmax 的单个输出层是输出层常用的激活函数。

ANN编译:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

在训练之前,ANN 会使用优化器函数和损失函数进行编译。

优化器:网络的优化器功能,优化器有多种类型,主要使用亚当。
损失:用于计算损失和误差。 有多种类型,选择取决于所处理问题的性质。
指标:用于衡量模型性能的指标。

用训练数据拟合模型:
model.fit(X_train,Y_train,batch_size=64, epochs=30)

此代码将创建模型

结论

我们现在可以从头开始创建人工神经网络(在 Python 上),因为我们了解了可以根据手头的问题更改的不同参数。

如果您有兴趣了解有关深度学习技术、机器学习的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭,该文凭专为在职专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和任务、IIIT-B 校友身份、5 个以上实用的实践顶点项目和顶级公司的工作协助。

从世界顶级大学学习ML 课程获得硕士、Executive PGP 或高级证书课程以加快您的职业生涯。

引领人工智能驱动的技术革命

申请机器学习和自然语言处理高级证书课程