首页 > 编程知识 正文

python卷积神经网络(python神经网络算法)

时间:2023-05-06 14:18:30 阅读:90547 作者:4806

了解神经网络结构的最好方法不是自己建立神经网络。 这篇文章将展示如何实现这个。

神经网络(NN )又称人工神经网络) ANN ),是机器学习领域中基于生物神经网络概念的学习算法的子集。

拥有5年以上经验的德国机器学习专家Andrey Bulezyuk表示:“神经网络彻底改变了机器学习。 为什么这么说呢,因为它们可以在广泛的学科和业界有效地对抽象化对象进行模型化。”

人工神经网络基本上由以下组件组成:

输入级别:接收和传递数据

隐藏层

输出层

层间的权重

每个隐藏层都有活动函数。 本简单的神经网络Python教程使用Sigmoid激活函数。

神经网络有很多种类型。 在这个项目中,我们将创建前馈或感知神经网络。 这种类型的ANN从前到后直接传递数据。

前馈神经元的训练往往需要反向传播,为网络提供合适的输入输出集。 输入数据发送到神经元后,将进行处理并生成输出。

下图显示了一个简单的神经网络结构:

要了解神经网络的工作原理,最好的方法不是采用哪个库,而是从一开始就学习如何构建神经网络。

本文将介绍如何使用Python编程语言创建简单的神经网络。

问题

以下是表示问题的表。

我们将提供一个新的数据集,利用它来训练神经网络,以预测正确的输出值。

如上表所示,输出值始终与输入节中的第一个值相同。 因此,输出的值最好是1。

让我们看看使用Python代码是否能得到同样的结果。 请在这篇文章的最后仔细阅读这个项目的代码之后再继续读这篇文章

创建神经网络类

用Python创建神经网络类来训练神经元,并给出准确的预测。 这个类还有其他帮助函数。

在这个简单的神经网络示例中,不使用神经网络库也可以部署numpy库来帮助计算。

numpy库有四种重要的方法:

exp—用于生成自然指数

array—用于生成矩阵

dot—用于矩阵乘法

random—用于生成随机数。 请注意生成随机数以确保有效的分布。

1. 应用Sigmoid函数

使用Sigmoid函数,作为神经网络的激活函数绘制具有特征的“s”型曲线。

这个函数可以将任意值映射到0到1之间的值,有助于输入加权和归一化。

然后,创建Sigmoid函数的导数,以帮助计算权重的调整参数。

可以利用Sigmoid函数的输出生成其导数。 例如,如果输出变量为“x”,则其导数为x*((1-x ) )。

2. 训练模型

这是我们教神经网络准确预测的阶段。 每个输入都有权重。 可以是正值或负值。 这意味着具有较大正权重或负权重的输入对结果的输出有较大的影响。 请记住,最初是通过为每个随机数分配权重开始的。

以下是这个神经网络示例的训练过程。

第一步:从训练数据集中提取输入,根据训练数据集的权重进行调整,用计算神经网络输出的方法进行筛选。

步骤2 :计算反向传播错误率。 在这种情况下,是神经元的预测输出和训练数据集的期望输出之间的差异。

步骤3 (利用误差加权导数公式,根据得到的误差范围,进行了一些小的权重调整。

步骤4 :重复此过程15000次。 每次迭代后,都会同时处理整个训练集。

使用“. t”函数将矩阵从水平位置转换为垂直位置。 因此,数字保存如下。

0af42faad61abba48e40503?from=pc">

最终,神经元的权重将根据所提供的训练数据进行优化。随后,如果让神经元考虑一个新的状态,与先前的状态相同,它便可以作出一个准确的预测。这就是反向传播的方式。

打包运行

最后,NeuralNetwork类初始化成功后,可以运行代码了。

下面是如何在Python项目中创建神经网络的完整代码:

import numpy as np class NeuralNetwork(): def __init__(self): # seeding for random number generation np.random.seed(1) #converting weights to a 3 by 1 matrix with values from -1 to 1 and mean of 0 self.synaptic_weights = 2 * np.random.random((3, 1)) - 1 def sigmoid(self, x): #applying the sigmoid function return 1 / (1 + np.exp(-x)) def sigmoid_derivative(self, x): #computing derivative to the Sigmoid function return x * (1 - x) def train(self, training_inputs, training_outputs, training_iterations): #training the model to make accurate predictions while adjusting weights continually for iteration in range(training_iterations): #siphon the training data via the neuron output = self.think(training_inputs) #computing error rate for back-propagation error = training_outputs - output #performing weight adjustments adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output)) self.synaptic_weights += adjustments def think(self, inputs): #passing the inputs via the neuron to get output #converting values to floats inputsinputs = inputs.astype(float) output = self.sigmoid(np.dot(inputs, self.synaptic_weights)) return output if __name__ == "__main__": #initializing the neuron class neural_network = NeuralNetwork() print("Beginning Randomly Generated Weights: ") print(neural_network.synaptic_weights) #training data consisting of 4 examples--3 input values and 1 output training_inputs = np.array([[0,0,1], [1,1,1], [1,0,1], [0,1,1]]) training_outputs = np.array([[0,1,1,0]]).T #training taking place neural_network.train(training_inputs, training_outputs, 15000) print("Ending Weights After Training: ") print(neural_network.synaptic_weights) user_input_one = str(input("User Input One: ")) user_input_two = str(input("User Input Two: ")) user_input_three = str(input("User Input Three: ")) print("Considering New Situation: ", user_input_one, user_input_two, user_input_three) print("New Output data: ") print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three]))) print("Wow, we did it!")

运行代码之后的输出:

这样,我们便成功地创建了一个简单的神经网络。

神经元首先给自己分配一些随机权重,接着,利用训练实例进行了自我训练。

之后,如果出现新的状态[1,0,0],则它得出的数值为0.9999584。

还记得我们想要的正确答案是1吗?

这个数值非常接近,Sigmoid函数输出值在0到1之间。

当然,在这个例子中,我们只使用一个神经元网络来完成简单的任务。如果我们把几千个人工神经网络连接在一起,情况将会是怎样呢?我们能不能完全模仿人类的思维方式呢?

这里小编是一个有着5年工作经验的Python工程师,关于Python有一个完整学习Python的路线,学习材料和工具。需要的伙伴可以私信我,发送“Python”就可以获取领取地址,免费送给大家。对于学习Python有任何问题(学习方法,学习效率,如何就业)都可以问我。希望你也能凭自己的努力,成为下一个优秀的程序员!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。