解开“神经网络”的神秘面纱(一)
人工智能的热度,神经网络的热度我就不说了。我也是在这个大潮中才接触人工智能,神经网络的。最近看了塔里克.拉希德的《Python神经网络编程》,然后跟着书也作出了神经网络,首先感谢作者无私的分享。我对高等数学不了解,Python也是新手,所以到作出自己的神经网络,花了近半个月时间。所以写点东西总结一下。
其实神经网络就像一个黑盒子,你从一边输入数据,而从另一边可以接受到一个完全不同的数据。哈哈,你可能会说,这不就是像一截生锈的管子,干净的水从这边流进去,而从另外一边得到的是带铁锈味的脏水吗?恭喜你答对了!
那我们就开始做我们的高大上的“神经网络”吧!
书上是这样一个问题:1千米等于多少英里?先看一张神经网络的原理图吧。
# 这里先设计神经网络的蓝图(专业术语叫类),
# 如果没接触过面向对象编程的小伙伴需要额外充电一下哟
class NeuralNetwork:
def __init__(self):
self.weight = None # 这里先申明权重,外面再修改
# 训练方法(函数)
def train(self, basis_value, right_value):
result = basis_value * self.weight # 正向计算
error = right_value - result # 统计和正确结果的差异
self.weight += error / basis_value # 根据差异修改权重
# 预测方法(函数)
def forecast(self, basis_value):
return basis_value * self.weight # 返回预测结果
nn = NeuralNetwork() # 实例化神经网络
# 我们必须先用正确的结果训练神经网络,就像教小孩认字,
nn.weight = 0.5 # 这个0.5就随便设的
# 开始训练神经网络
# 第一个为基础信息,就是基础值,在这个值的基础上预测出正确结果
# 第二个参数是正确的结果,这里的结果必须是正确的,要不然就误人子弟了~~
nn.train(100, 62.137)
# 一句就训练完毕了!神奇吧,觉得神奇的就鼓掌吧。
# 那我们看见神经网络的核心,权重值变成什么样了
print('神经网络的权重:', nn.weight) # 这里得到的结果是0.62137,很正确嘀~~~
# 神经网络已经被我们训练好了,那我们开始用神经网络帮我们干活吧
basis_value = 520 # 先修改基础值(输入信息)
# 预测是我们传入基础值,返回预测结果
print('预测结果:', nn.forecast(basis_value)) # 得到的结果果然是323.1124,和我们用计算器算的一样
# 至此,一个简单的神经网络就完成了
聪明的小伙伴会发现从上面代码中发现有很多问题?
1.这个题目中,不就是为了得到一个权重值,不就一道除法题吗?为什么非要搞这么复杂呢?
答:这个简单的神经网络,就是为了展现一个完整的神经网络构架,后面我们再在后面添砖加瓦,完成更为复杂的事情。到时就不是简单的除法题目了。
2.神经网络必须用Python语言编程吗?
答:不是必须用Python,用其他语言也可以,C语言啊,JAVA啊,都可以。只是用Python的比较多,Python中numpy用于科学计算的比较方便。
3.程序运行一次就完了,我怎么重复使用?我没需要预测都需要训练一下神经网络吗?
答:神经网络的核心就是神经网络的权重值(nn.weight),我们只需要把权重值(nn.weight)保存起来,比如存入一个txt(文本文件)里面,下次需要预测的时候,再吧这个值取出来就可以。我们可以把上面的文件保存为独立的3部分,一部分是类部分,一部分是训练部分,再一部分就是预测部分。上面写在一起是为了方便大家直观理解。
我也是个新手,如果有贻笑大方的地方,多多包涵啊!