神经网络是一种并行计算设备,旨在构建大脑的计算机模型。其主要目标是开发一个能够比传统系统更快完成各种计算任务的系统。这些任务包括模式识别与分类、近似、优化和数据聚类。
什么是人工神经网络(ANN)
人工神经网络(ANN)是一种高效的计算系统,其核心主题借鉴了生物神经网络的类比。人工神经网络也被称为人工神经系统、并行分布式处理系统和连接主义系统。ANN收集大量以某种模式互联的单元,以便它们之间的通信。这些单元,也称为节点 或神经元,是并行运行的简单处理器。
每个神经元都通过连接链 与其他神经元相连。每个连接链路都关联一个权重,包含输入信号的信息。这是神经元解决特定问题最有用的信息,因为重量 通常会激发或抑制所传递的信号。每个神经元都有其内部状态,这被称为激活信号。输出信号在输入信号和激活规则结合后产生的,可以发送给其他单元。
如果你想详细研究神经网络,可以点击链接------人工神经网络。
安装有用软件包
在Python中创建神经网络时,我们可以使用一个强大的神经网络软件包NeuroLab。这是一个基础神经网络算法库,提供灵活的网络配置和Python学习算法。你可以在命令提示符下使用以下命令安装此包 −
pip install NeuroLab
如果您使用Anaconda环境,请使用以下命令安装NeuroLab −
python
conda install -c labfabulous neurolab
构建神经网络
在本节中,让我们用 NeuroLab 软件包构建一些 Python 神经网络。
基于感知器的分类器
感知器是人工神经网络的构建模块。如果你想了解更多关于感知器的信息,可以点击链接 − artificial_neural_network
以下是构建基于简单神经网络感知器的 Python 代码的逐步执行 −
如图所示导入必要的软件包 −
python
import matplotlib.pyplot as plt import neurolab as nl
输入值。请注意,这是监督学习的例子,因此你还需要提供目标值。
python
input = [[0, 0], [0, 1], [1, 0], [1, 1]] target = [[0], [0], [0], [1]]
创建包含2个输入和1个神经元的网络 −
python
net = nl.net.newp([[0, 1],[0, 1]], 1)
现在,训练网络。这里,我们用三角洲规则进行训练。
python
error_progress = net.train(input, target, epochs=100, show=10, lr=0.1)
现在,可视化输出并绘制图−
python
plt.figure() plt.plot(error_progress) plt.xlabel('Number of epochs') plt.ylabel('Training error') plt.grid() plt.show()
你可以看到下图,显示了使用误差指标−的训练进度

单层神经网络
在这个例子中,我们创建了一个单层神经网络,由独立的神经元作用于输入数据以产生输出。注意我们使用的是名为neural_simple.txt的文本文件作为输入。
导入如图所示的有用包 −
python
import numpy as np import matplotlib.pyplot as plt import neurolab as nl
加载数据集时,加载方式如下 −
python
input_data = np.loadtxt(/Users/admin/neural_simple.txt')
以下是我们将使用的数据。注意,在这份数据中,前两列是特征,后两列是标签。
python
array([[2. , 4. , 0. , 0. ], [1.5, 3.9, 0. , 0. ], [2.2, 4.1, 0. , 0. ], [1.9, 4.7, 0. , 0. ], [5.4, 2.2, 0. , 1. ], [4.3, 7.1, 0. , 1. ], [5.8, 4.9, 0. , 1. ], [6.5, 3.2, 0. , 1. ], [3. , 2. , 1. , 0. ], [2.5, 0.5, 1. , 0. ], [3.5, 2.1, 1. , 0. ], [2.9, 0.3, 1. , 0. ], [6.5, 8.3, 1. , 1. ], [3.2, 6.2, 1. , 1. ], [4.9, 7.8, 1. , 1. ], [2.1, 4.8, 1. , 1. ]])
现在,将这四列分成2列数据和2个标签−
python
data = input_data[:, 0:2] labels = input_data[:, 2:]
使用以下命令绘制输入数据 −
python
plt.figure() plt.scatter(data[:,0], data[:,1]) plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.title('Input data')
现在,定义每个维度的最小值和最大值,如此处所示 −
python
dim1_min, dim1_max = data[:,0].min(), data[:,0].max() dim2_min, dim2_max = data[:,1].min(), data[:,1].max()
接下来,定义输出层中的神经元数量如下 −
python
nn_output_layer = labels.shape[1]
现在,定义一个单层神经网络 −
python
dim1 = [dim1_min, dim1_max] dim2 = [dim2_min, dim2_max] neural_net = nl.net.newp([dim1, dim2], nn_output_layer)
用时间点数和学习率训练神经网络,如图所示 −
python
error = neural_net.train(data, labels, epochs = 200, show = 20, lr = 0.01)
现在,使用以下命令可视化并绘制训练进度 −
python
plt.figure() plt.plot(error) plt.xlabel('Number of epochs') plt.ylabel('Training error') plt.title('Training error progress') plt.grid() plt.show()
现在,使用上述分类器中的测试数据点 −
python
print('\nTest Results:') data_test = [[1.5, 3.2], [3.6, 1.7], [3.6, 5.7],[1.6, 3.9]] for item in data_test: print(item, '-->', neural_net.sim([item])[0])
你可以在这里找到测试结果------
python
[1.5, 3.2] --> [1. 0.] [3.6, 1.7] --> [1. 0.] [3.6, 5.7] --> [1. 1.] [1.6, 3.9] --> [1. 0.]
你可以看到以下图表作为迄今为止讨论的代码输出------


多层神经网络
在这个例子中,我们创建了一个由多层神经网络组成的多层神经网络,以提取训练数据中的底层模式。这个多层神经网络将像回归器一样工作。我们将根据以下公式生成一些数据点:y = 2x2+8.
如图所示导入必要的软件包 −
python
import numpy as np import matplotlib.pyplot as plt import neurolab as nl
基于上述方程生成某个数据点 −
python
min_val = -30 max_val = 30 num_points = 160 x = np.linspace(min_val, max_val, num_points) y = 2 * np.square(x) + 8 y /= np.linalg.norm(y)
现在,将该数据集重塑为如下 −
python
data = x.reshape(num_points, 1) labels = y.reshape(num_points, 1)
使用以下命令可视化并绘制输入数据集 −
python
plt.figure() plt.scatter(data, labels) plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.title('Data-points')
现在,构建一个有两层隐藏神经的神经网络 ,第一隐藏层有十 个神经元,第二隐藏层有六 个神经元,输出层有一个。
python
neural_net = nl.net.newff([[min_val, max_val]], [10, 6, 1])
现在使用梯度训练算法 −
python
neural_net.trainf = nl.train.train_gd
现在训练网络,目标是学习上述生成的数据 −
python
error = neural_net.train(data, labels, epochs = 1000, show = 100, goal = 0.01)
现在,对训练数据点运行神经网络------
python
output = neural_net.sim(data) y_pred = output.reshape(num_points)
现在绘制和可视化任务−
python
plt.figure() plt.plot(error) plt.xlabel('Number of epochs') plt.ylabel('Error') plt.title('Training error progress')
现在我们将绘制实际输出与预测输出的比值 −
python
x_dense = np.linspace(min_val, max_val, num_points * 2) y_dense_pred = neural_net.sim(x_dense.reshape(x_dense.size,1)).reshape(x_dense.size) plt.figure() plt.plot(x_dense, y_dense_pred, '-', x, y, '.', x, y_pred, 'p') plt.title('Actual vs predicted') plt.show()
根据上述命令,你可以观察到如下图 −


