我是靠谱客的博主 爱笑柜子,最近开发中收集的这篇文章主要介绍(9):神经元网络层次的权重Weight连接,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Create_AI_Framework_In5Classes版本的NetworkConnection.py代码如下:

 # -*- coding: utf-8 -*-from entity.Weight import Weightimport mathimport random
class NetworkConnection: #Weight代表了神经网络中前后层次之间的联系 def create_Weights(nodes, num_of_features, hidden_layers): weights = [] #整个Neural Network的层数= # Input layers + Hidden layers + Output layers total_layers = 1 + len(hidden_layers) + 1 #记录Weight的ID weight_index = 0 #Weight发生于前后两个Layers之间,所以要从总的Layer数量中减去1 for i in range(total_layers - 1): #循环遍历所有的节点 for j in range(len(nodes)): #判断当前节点所在的具体的Layer
if nodes[j].get_level() == i: #再次循环遍历所有的节点,核心目的在判断不同节#点之间的Layer的先后关系 for k in range(len(nodes)): #构成Weight的前提条件是有前后相邻的Layer关系 if nodes[k].get_level() == i + 1: #节点所在的Layer的ID越小,就越在前面,nodes[j]在第i层,而nodes[k]在第i+1层 ,从nodes[j]触发到nodes[k]之间创建Weight weight = Weight() weight.set_weight_index(weight_index) weight.set_from_index(nodes[j].get_index()) weight.set_to_index(nodes[k].get_index()) #下面是5节课内从零起步(无需数学和Python基础)编码实现AI框架 #第一节课:从零起步编码实现多层次神经网络 的最大难点 # 创建Weight的之Value,此时请再次运行http://playground.tensorflow.org/ # 会发现AI运行所有的故事都是在更新Weight的值 #具体算法实现请参考本课程群内部的文件 range_min = 0 range_max = 1 init_epsion = math.sqrt(6) / (math.sqrt(num_of_features) + 1) rand = range_min + (range_max - range_min) * random.random() rand = rand * (2 * init_epsion) -init_epsion weight.set_value(rand) weights.append(weight) #加入到weights集合中 weight_index = weight_index + 1 print("The weight from " + str(nodes[j].get_index()) + " to "+ str(nodes[k].get_index()) + " : " + str(rand)) return weights

回到入口程序Create_AI_Framework_In5Classes(Class1)的Neuron_Network_Entry.py,准备调用我们的NetworkConnection.create_Weights权重连接:

  • Neuron_Network_Entry.py上段代码中第15行 以后新增代码。在NetworkConnection.create_Weights方法中传入nodes,num_of_features,hidden_layers参数。

  • 同时,也新增加代码,打印神经元节点中哪些节点是Bias节点。

 

weights = NetworkConnection.create_Weights(nodes,num_of_features, hidden_layers)for i in range(len(nodes)):    print("This is a bias:" + str(i) +" "+ str(nodes[i].get_is_bias_unit()))


这个时候我们回顾一下,在Create_AI_Framework_In5Classes(Class1)版本的

NetworkStructure.py中对于神经元网络不同层次的level信息还没有设置,要对神经元节点设置level信息。

在Create_AI_Framework_In5Classes(Class1)版本的NetworkStructure.py 在NetworkStructure.py的基础上微调:

  • NetworkStructure.py 代码中第15行之后新增一行代码,新增加对输入层Bias节点的层次设置,输入层Bias层次设置为0。

  • NetworkStructure.py  代码中第32行之后新增一行代码,新增加对隐藏层Bias节点的层次设置,输入层Bias层次设置为i+1, 隐藏层的层次i从0开始,因此加上1。

  • NetworkStructure.py 代码中第45行之后新增一行代码,新增加对隐藏层神经元节点的层次设置,输入层Bias层次设置为i+1, 隐藏层的层次i从0开始,因此加上1。

  • NetworkStructure.py 代码中第59行之后新增一行代码,新增加对输出层神经元节点的层次设置,输出层Bias层次设置为1 + len(hidden_layers),层次数加1。

……node.set_level(0)……node.set_level(i+1)……node.set_level(i+1)……node.set_level(1 + len(hidden_layers))…… 

之前在Create_AI_Framework_In5Classes(Class1)版本的NetworkStructure.py 对输入层的节点还没有创建,这里加上输入层节点的创建代码,输入层跟输入的Feature有关系,通过for循环num_of_features,因此索引值从0开始,因此打印输入层节点的时候将i加1,然后将创建节点的代码复制过来进行修改,设置输入层的node的_is_bias_unit为False值,设置index值为nodeIndex。然后nodeIndex加1。

在Create_AI_Framework_In5Classes(Class1)版本的NetworkStructure.py 在NetworkStructure.py 的基础上微调:

  • NetworkStructure.py 代码中第25行之后新增代码,在已经创建的输入层Bias代码之后增加创建输入层节点的代码,输入层神经元节点的层次设置为0。打印输入层节点的信息,格式为V和i+1的信息。

……   for i in range(num_of_features):            print("V" + str(i+1) + "t", end = '')            node = Node()            node.set_level(0)            node.set_index(nodeIndex)            node.set_label("+1")            node.set_is_bias_unit(False)            nodes.append(node)            nodeIndex = nodeIndex + 1                print("")……


至此,我们已经初步实现了NetworkStructure.py神经元节点构建、NetworkConnection.py神经元网络层次的权重Weight连接 。


欢迎关注微信公众号:“从零起步学习人工智能”。

640?wx_fmt=png

喜欢我们发布的信息,就在右下角点一下“在看”吧!欢迎转发分享!


最后

以上就是爱笑柜子为你收集整理的(9):神经元网络层次的权重Weight连接的全部内容,希望文章能够帮你解决(9):神经元网络层次的权重Weight连接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(24)

评论列表共有 0 条评论

立即
投稿
返回
顶部