主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
Python 人工智能

Python 人工智能 教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

Python 人工智能 神经网络


上一章 下一章

神经网络是一种并行计算设备,试图建立一种计算机模型来模拟大脑的功能。主要目标是开发一个比传统系统更快执行各种计算任务的系统。这些任务包括模式识别与分类、逼近、优化和数据聚类等。

什么是人工神经网络(ANN)

人工神经网络(ANN)是一个高效的计算系统,其核心思想是从生物神经网络的类比中借鉴来的。ANN 也被称为人工神经系、并行分布式处理系统或联结主义系统。ANN 包含大量的单元,它们以某种模式相互连接,允许它们之间进行通信。这些单元,也被称作节点或神经元,是简单的并行处理器。

每一个神经元通过连接链与其他神经元相连。每个连接链都有一个权重,这个权重包含了输入信号的信息。这对神经元解决特定问题来说是最有用的信息,因为权重通常会激发或抑制正在传递的信号。每个神经元都有一个内部状态,这被称为激活信号。输出信号是在结合输入信号和激活规则后产生的,可能会发送给其他单元。

如果您想详细了解神经网络,请参考链接 —— 人工神经网络。

安装有用的软件包

为了在 Python 中创建神经网络,我们可以使用一个强大的神经网络软件包叫做 NeuroLab。这是一个包含基本神经网络算法的库,具有灵活的网络配置和学习算法。您可以使用以下命令在命令提示符下安装此软件包:

pip install NeuroLab

如果您使用的是 Anaconda 环境,则可以使用以下命令安装 NeuroLab:

conda install -c labfabulous neurolab

构建神经网络

在本节中,让我们通过使用 NeuroLab 软件包在 Python 中构建一些神经网络。

基于感知器的分类器

感知器是 ANN 的构建块。如果您想了解更多关于感知器的信息,请参考链接 —— artificial_neural_network。

下面是使用 Python 代码构建基于感知器的简单神经网络分类器的逐步执行:

导入必要的包

import matplotlib.pyplot as plt
import neurolab as nl

输入值

请注意,这是一个监督学习的例子,因此您也需要提供目标值。

input = [[0, 0], [0, 1], [1, 0], [1, 1]]
target = [[0], [0], [0], [1]]

创建网络

net = nl.net.newp([[0, 1], [0, 1]], 1)

训练网络

在这里,我们使用 Delta 规则来进行训练。

error_progress = net.train(input, target, epochs=100, show=10, lr=0.1)

可视化输出并绘制图表

plt.figure()
plt.plot(error_progress)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.grid()
plt.show()

您可以看到以下图表显示了使用误差度量的训练进度:

基于感知器的分类器

Perceptron based Classifier


单层神经网络

在这个例子中,我们将创建一个单层神经网络,该网络由独立的神经元组成,它们作用于输入数据以产生输出。请注意,我们使用的输入文件名为 neural_simple.txt。

导入有用的包

import numpy as np
import matplotlib.pyplot as plt
import neurolab as nl

加载数据集

input_data = np.loadtxt('/Users/admin/neural_simple.txt')

以下是我们将要使用的数据。请注意,在此数据中,前两列为特征,最后两列为标签。

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. ]])

将四列分成两列的数据和两列的标签

data = input_data[:, 0:2]
labels = input_data[:, 2:]

使用以下命令绘制输入数据

plt.figure()
plt.scatter(data[:,0], data[:,1])
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Input data')

定义每个维度的最小值和最大值

dim1_min, dim1_max = data[:,0].min(), data[:,0].max()
dim2_min, dim2_max = data[:,1].min(), data[:,1].max()

定义输出层中的神经元数量

nn_output_layer = labels.shape[1]

定义单层神经网络

dim1 = [dim1_min, dim1_max]
dim2 = [dim2_min, dim2_max]
neural_net = nl.net.newp([dim1, dim2], nn_output_layer)

训练神经网络

error = neural_net.train(data, labels, epochs = 200, show = 20, lr = 0.01)

使用以下命令可视化和绘制训练进度

plt.figure()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.title('Training error progress')
plt.grid()
plt.show()

在上述分类器中使用测试数据点

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])

您会发现测试结果如下:

[1.5, 3.2] --> [1. 0.]
[3.6, 1.7] --> [1. 0.]
[3.6, 5.7] --> [1. 1.]
[1.6, 3.9] --> [1. 0.]

您可以看到以下图表作为上述讨论代码的输出:

单层神经网络

Single Layer Neural Networks

迭代次数

Number of Epochs

多层神经网络

在本例中,我们将创建一个多层神经网络,该网络由多于一层的结构组成,以提取训练数据中的潜在模式。这个多层神经网络将像回归器一样工作。我们将根据方程 y = 2x^2 + 8 生成一些数据点。

导入必要的包

import numpy as np
import matplotlib.pyplot as plt
import neurolab as nl

根据上述方程生成一些数据点

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)

重塑此数据集

data = x.reshape(num_points, 1)
labels = y.reshape(num_points, 1)

使用以下命令可视化和绘制输入数据集

plt.figure()
plt.scatter(data, labels)
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Data-points')

使用 neurolab 构建具有两个隐藏层的神经网络

neural_net = nl.net.newff([[min_val, max_val]], [10, 6, 1])

现在使用梯度训练算法

neural_net.trainf = nl.train.train_gd

现在训练网络,以在上述生成的数据上学习为目标

error = neural_net.train(data, labels, epochs = 1000, show = 100, goal = 0.01)

在训练数据点上运行神经网络

output = neural_net.sim(data)
y_pred = output.reshape(num_points)

现在绘图和可视化任务

plt.figure()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Error')
plt.title('Training error progress')

接下来我们将绘制实际输出与预测输出的对比

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()

由于上述命令的结果,您可以观察到下面所示的图表:

多层神经网络

训练误差进展

Multi Layer Neural Networks

实际与预测

Training Error Progress
Actual vs Predicted
上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图