您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

手把手教你用Python创建简单的神经网络!

5b51 2022/1/14 8:25:28 python 字数 13182 阅读 1075 来源 www.jb51.cc/python

数据 ? : ? 了解神经网络如何工作的最佳方法是学习如何从头开始构建神经网络(而不是采用任何库)。

概述

手把手教你用Python创建简单的神经网络!

数据

手把手教你用Python创建简单的神经网络!

手把手教你用Python创建简单的神经网络!

了解神经网络如何工作的最佳方法是学习如何从头开始构建神经网络(而不是采用任何库)。

在本文中,我们将演示如何利用Python编程语言创建一个简单的神经网络。

问题

如下是一个展示问题的表格。

手把手教你用Python创建简单的神经网络!

手把手教你用Python创建简单的神经网络!

numpy库提供了以下四种重要方法

exp—用于生成自然指数

array—用于生成矩阵

dot—用于矩阵相乘

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

我们将使用Sigmoid函数,来绘制一个特征“S”型曲线,作为神经网络的激活函数

手把手教你用Python创建简单的神经网络!

函数可以将任何值映射到0到1之间的值,它将有助于我们对输入的加权和归一化。

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

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

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

下面是这个神经网络示例的训练过程:

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

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

第三步:利用误差加权导数公式,根据所得到的误差范围,进行了一些较小的权值调整。

第四步:对这一过程进行15000次迭代。在每次迭代中,整个训练集被同时处理。

我们使用“.T”函数将矩阵从水平位置转换为垂直位置。因此,数字将以如下方式存储:3

进群:960410445   一起交流共同进步!

手把手教你用Python创建简单的神经网络!

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

打包运行

最后,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

inputs = 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,1],[1,1,[0,1]])

training_outputs = np.array([[0,0]]).T

training taking place

neural_network.train(training_inputs,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_three])))
print("Wow,we did it!")

class NeuralNetwork():

def init(self):

np.random.seed(1)

self.synaptic_weights = 2 * np.random.random((3,1)) - 1

def sigmoid(self,x):

return 1 / (1 + np.exp(-x))

def sigmoid_derivative(self,x):

return x * (1 - x)

def train(self,training_inputs,training_outputs,training_iterations):

for iteration in range(training_iterations):

output = self.think(training_inputs)

error = training_outputs - output

adjustments = np.dot(training_inputs.T,error * self.sigmoid_derivative(output))

self.synaptic_weights += adjustments

def think(self,inputs):

inputs = inputs.astype(float)
output = self.sigmoid(np.dot(inputs,self.synaptic_weights))
return output

if name == "main":

neural_network = NeuralNetwork()

print("Beginning Randomly Generated Weights: ")
print(neural_network.synaptic_weights)

training_inputs = np.array([[0,1],[1,1,[0,1]])

training_outputs = np.array([[0,0]]).T

neural_network.train(training_inputs,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_three])))
print("Wow,we did it!")

class NeuralNetwork():

def init(self):

np.random.seed(1)

self.synaptic_weights = 2 * np.random.random((3,1)) - 1

def sigmoid(self,x):

return 1 / (1 + np.exp(-x))

def sigmoid_derivative(self,x):

return x * (1 - x)

def train(self,training_inputs,training_outputs,training_iterations):

for iteration in range(training_iterations):

output = self.think(training_inputs)

error = training_outputs - output

adjustments = np.dot(training_inputs.T,error * self.sigmoid_derivative(output))

self.synaptic_weights += adjustments

def think(self,inputs):

inputs = inputs.astype(float)
output = self.sigmoid(np.dot(inputs,self.synaptic_weights))
return output

if name == "main":

neural_network = NeuralNetwork()

print("Beginning Randomly Generated Weights: ")
print(neural_network.synaptic_weights)

training_inputs = np.array([[0,1],[1,1,[0,1]])

training_outputs = np.array([[0,0]]).T

neural_network.train(training_inputs,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_three])))
print("Wow,we did it!")

运行代码之后的输出

手把手教你用Python创建简单的神经网络!

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

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

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

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

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

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

总结

以上是编程之家为你收集整理的手把手教你用Python创建简单的神经网络!全部内容,希望文章能够帮你解决手把手教你用Python创建简单的神经网络!所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶