TensorFlow中的人工神经网络

TensorFlow中的人工神经网络

在这篇文章中,我们将看到ANN的一些基础知识和人工神经网络的一个简单实现。Tensorflow是一个强大的机器学习库,用于创建模型和神经网络。

那么,在我们开始之前,什么是人工神经网络?这里是人工神经网络的一个简单而清晰的定义。长话短说,人工神经网络是一种模仿人脑的技术,可以从一些关键特征中学习,并在现实世界中进行分类或预测。人工神经网络是由若干个神经元组成的,与人脑中的神经元相比。

它旨在使计算机从小的洞察力和特征中学习,并使它们自主地从现实世界中学习,并比人类更快地提供解决方案。

人工神经网络中的一个神经元,将在其内部进行两个操作

  • 所有权重的总和
  • Activation 函数

因此,一个基本的人工神经网络将以一种形式存在

1.输入层–从用户或客户端或服务器获取数据,进行分析并给出结果。
2.隐层–这一层可以有任何数量,这些层将通过不同的偏置、权重和激活函数对输入进行分析,以提供一个输出。
3.输出层 – 这是我们可以从神经网络获得结果的地方。

TensorFlow中的人工神经网络

因此,我们知道了神经网络的概要,现在我们将转向帮助神经网络从数据中正确学习的重要功能和方法。

注意:任何神经网络都可以从数据中学习,但如果没有好的参数值,神经网络可能无法正确地从数据中学习,不会给你正确的结果。

决定我们神经网络质量的一些特征是:

  1. 激活功能
  2. 损失函数
  3. Optimizer

现在我们将详细讨论它们中的每一个。

我们建立模型的第一个阶段是。

# Defining the model
model = keras.Sequential([
    keras.layers.Dense(32, input_shape=(2,), activation='relu'),
    keras.layers.Dense(16, activation = 'relu'),
    keras.layers.Dense(2, activation = 'sigmoid')
])

神经网络中的层是非常重要的,正如我们前面所看到的,人工神经网络由3层组成,即输入层、隐藏层和输出层。输入层由需要在神经网络中进行分析的特征和数值组成。基本上,这是一个将我们的输入特征读入人工神经网络的层。

隐蔽层是所有魔法发生的层,当所有的输入神经元将特征传递给隐蔽层时,隐蔽层内的每个神经元都会将所有输入层的加权特征相加,并应用激活函数,将数值保持在0和1之间,以方便学习。这里我们需要手动选择每层的神经元数量,而且必须是网络的最佳值。

在这里,真正的决策者是每一层之间的权重,它将最终把一个0到1的值传递给输出层。到此为止,我们已经看到了人工神经网络中各层的重要性。在TensorFlow中,有许多层的类型,但我们将经常使用的是密集层。

语法: tf.keras.layers.Dense()

这是一个全连接层,其中每一个特征输入都将以某种方式与结果连接。

激活函数

激活函数是简单的数学方法,它将所有的值带入0到1的范围内,这样机器在分析数据的过程中就会非常容易学习数据。张量流支持各种各样的激活函数。一些常用的函数是。

  1. Sigmoid
  2. Relu
  3. Softmax
  4. Swish
  5. Linear

每一个激活函数都有其特定的使用情况和缺点。但在隐藏层和输入层中使用的激活函数是’Relu’,另一个这将对结果产生更大影响的是损失。

之后,我们可以在TensorFlow的模型编译中看到这些参数。

# Compilation of model
model.compile(optimizer='adam'
              loss=a_loss_function
              metrics=['metrics'])

损失函数

损失函数是创建神经网络时需要注意的一个非常重要的事情,因为神经网络中的损失函数将计算预测输出和实际结果之间的差异,并极大地帮助神经网络中的优化器更新其反向传播的权重。

TensorFlow库支持的损失函数有很多,常用的又有几个。

  1. 绝对平均数

  2. MeanSquaredError

  3. 二元交叉熵
  4. 分类交叉熵
  5. 稀疏的分类交叉熵

注意:同样,损失的选择完全取决于问题的类型和我们对神经网络的期望结果。

优化器

优化器是一个非常重要的东西,因为这是一个帮助神经网络改变反向传播权重的功能,从而使实际结果和预测结果之间的差异逐步减少,并获得损失非常小的那一点,模型能够预测更准确的结果。

同样,TensorFlow支持许多优化器,仅举几例。

  1. 梯度下降
  2. SDG – 随机梯度下降法
  3. Adagrad
  4. Adam

编译完模型后,我们需要用数据集拟合模型进行训练。

# fitting the model
model.fit(train_data, train_label,
          epochs=5, batch_size=32)

Epochs

epochs只是整个数据集向前传递的次数,并通过更新神经网络的权重进行反向传播。通过这样做,我们可以在每一个纪元中找到未见过的模式和信息,从而提高模型的准确性。

为了处理神经网络的一些局限性,如过度拟合训练数据和无法在未见过的数据上表现良好。这可以通过一些退出层来解决,这意味着使一个层中的一些节点不活跃,这迫使神经网络中的每一个节点学习更多关于输入的特征,因此问题可以得到解决。

在TensorFlow中,在一个图层中添加一个辍学点简直就是一行代码。

语法: tf.keras.layers.Dropout(rate, noise_shape=None, seed=None, **kwargs )

如何用TensorFlow训练一个神经网络

第1步:导入库

我们将导入所需的库。

# Importing the libraries
import pandas as pd
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split

第2步:导入数据

我们在这个例子中使用的数据是用Numpy随机生成的。你可以在这里下载这些数据。在这个数据中,x和y是坐标点,颜色特征是随机生成的目标值,它是二进制的,代表红色-1,蓝色-0。

# Importing the data
df = pd.read_csv('data.txt')

TensorFlow中的人工神经网络

数据将看起来像:

TensorFlow中的人工神经网络

第3步:拆分数据

现在我们要把数据集分成训练和测试两部分,用未见过的数据评估模型,并检查其准确性。

# split the data into train and test set
train, test = train_test_split(
    df, test_size=0.2, random_state=42, shuffle=True)

第4步:构建输入

在这一步,我们将构建我们需要输入到网络中的输入。为了简单起见,也为了模型,我们将把数据的两个特征堆叠成x,把目标变量堆叠成y。我们使用numpy.column_stack()来堆叠

# Constructing the input
x = np.column_stack((train.x.values, train.y.values))
y = train.color.values

第5步:建立一个模型

现在我们要建立一个简单的神经网络来对点的颜色进行分类,有两个输入节点,一个隐藏层和一个输出层,有relu和sigmoid激活函数,还有稀疏的分类交叉熵损失函数,这将是一个完全连接的前馈网络。

# Defining the model
model = keras.Sequential([
    keras.layers.Dense(4, input_shape=(2,), activation='relu'),
    keras.layers.Dense(2, activation='sigmoid')
])
 
# Compiling the model
model.compile(optimizer='adam',
              loss=keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])
 
# fitting the model
model.fit(x, y, epochs=10, batch_size=8)

输出:

TensorFlow中的人工神经网络

如果我们用未见过的数据来评估这个模型,它的准确率会非常低。

# Evaluating the model
x = np.column_stack((test.x.values, test.y.values))
y = test.color.values
model.evaluate(x, y, batch_size=8)

TensorFlow中的人工神经网络

第6步:建立一个更好的模型

现在我们要用一些额外的隐藏层和输出层中更好的激活函数’softmax’来改进这个模型,建立一个更好的神经网络。

# Defining the model
model_better = keras.Sequential([
    keras.layers.Dense(16, input_shape=(2,), activation='relu'),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(2, activation='softmax')
])
 
# Compiling the model
model_better.compile(optimizer='adam',
                     loss=keras.losses.SparseCategoricalCrossentropy(),
                     metrics=['accuracy'])
 
# Constructing the input
x = np.column_stack((train.x.values, train.y.values))
y = train.color.values
 
# fitting the model
model_better.fit(x, y, epochs=10, batch_size=8)

输出:

TensorFlow中的人工神经网络

第7步:评估模型

最后,如果我们评估该模型,我们可以清楚地看到,该模型在未见过的数据上的准确度已经从66->85/。所以我们建立了一个高效的模型。

TensorFlow中的人工神经网络

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Tensorflow 教程