图源:Google
很永劫光以来,我一贯对构建神经网络跃跃欲试,现在终于有机会来研究它了。我想我并没有完备节制神经网络背后的数学事理,以是先教人工智能做一些大略的事情吧。
代码事理
神经网络并不是一个新观点,1943年,由沃伦·麦卡洛克(WarrenMcCulloch)和沃尔特·皮茨(Walter Pitts)首次提出。
我们将构建一个没有隐蔽层或感知器的单层神经网络。它由一个包含演习示例、突触或权重以及神经元的输入层和一个含有精确答案的输出层组成。神经网络图形如下所示:
此外,须要理解一些如sigmoid和导数之类的数学观点,以清楚神经元的学习办法。神经元只需进行大略操作,即取一个输入值,乘以突触权重。之后,对所有这些乘法结果求和,并利用sigmoid函数得到0到1内的输出值。
神经元表示:
Sigmoid函数:
问题界定
输入层上有数字序列。我们预期的空想结果是,在数据集样本中,如果输入第一个数字是1,则神经网络返回1;如果第一个数字是0,则返回0。结果在输出层中显示。问题集如下图:
先决条件
开始编码的条件——在观点上达到一定程度的理解。
NumPY安装:
pip install numpy
安装成功,即可进入编码部分。首先,将NumPy导入Python文件中:
import numpy as np
演习神经网络
首先,创建一个sigmoid函数:
其次,定义演习示例、输入(4×5矩阵)和输出:
接下来,通过天生随机值来初始化突触权重,并将结果排列在4×1的矩阵中:
末了,构建演习模型。利用for循环,所有的演习都将在此循环中进行。调用sigmoid函数,并将所有输入的总和乘以sigmoid权重。然后采取Np.dot进行矩阵乘法。过程如下图:
输出结果如下图:
现在进行神经网络模型演习,方法是打算sigmoid函数的输出和实际输出之间的差值。之后可以根据偏差的严重性调度权重。多次重复这个过程,比如说一万次。定义sigmoid导数:
以下是打算和调度权重的方法:
开始学习,不雅观察学习时长会如何影响结果。从100次迭代开始:
开始情形比较乐不雅观——我们的人工智能已经学会了识别模式,但缺点率仍旧居高不下。现在进行1000次迭代:
情形好转,连续进行10000次迭代:
10万次迭代:
我们可以连续更多次的学习迭代,但永久无法达到100%的准确性,由于这须要进行无限次的打算。但纵然在最坏的情形下,准确率也达到了99.77%,这相称不错。
对付终极代码,我写得很俊秀,并通过函数将其分开。除此之外,在文本文件中,我还添加了一种非常繁芜方法以存储权重。这样只需进行一次学习,而且须要利用AI时,只需导入权重并利用sigmoid函数即可。
import numpy as npfrom tempfile import TemporaryFiledef sigmoid(x): return 1 / (1 + np.exp(-x))def sigmoid_der(x): return x (1 - x)def training(): training_inputs = np.array([[0,0,1,0], [1,1,1,0], [1,0,1,0], [0,1,1,1], [0,1,0,1]]) trainign_outputs = np.array([[0,1,1,0,0]]).T np.random.seed(1) synaptic_weights = 2 np.random.random((4,1)) - 1 for i in range(50000): inputs = training_inputs outputs = sigmoid(np.dot(inputs, synaptic_weights)) error = trainign_outputs - outputs adjustments = error sigmoid_der(outputs) synaptic_weights += np.dot(inputs.T, adjustments) data_file = open("data.txt", "w") for row in synaptic_weights: np.savetxt(data_file, row) data_file.close()def thinking(inputs): synaptic_weights = np.loadtxt("data.txt").reshape(4, 1) outputs = sigmoid(np.dot(inputs, synaptic_weights)) print(outputs) return outputstraining()thinking(np.array([1,1,0,1]))
图源:Pixabay
我的第一个人工智能已经准备就绪,随时可以投入生产。纵然它只能在极小的数据集上识别非常大略的模式,但现在我们可以扩展它,例如,考试测验教授人工智能识别图片中的内容。学无止境,精进不休!
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范