Create_AI_Framework_In5Classes版本的NetworkConnection.py代码如下:
1# -*- coding: utf-8 -*-from entity.Weight import Weightimport mathimport randomclass NetworkConnection:#Weight代表了神经网络中前后层次之间的联系def create_Weights(nodes, num_of_features, hidden_layers):weights = []#整个Neural Network的层数=# Input layers + Hidden layers + Output layerstotal_layers = 1 + len(hidden_layers) + 1#记录Weight的IDweight_index = 0#Weight发生于前后两个Layers之间,所以要从总的Layer数量中减去1for i in range(total_layers - 1):#循环遍历所有的节点for j in range(len(nodes)):#判断当前节点所在的具体的Layerif 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]之间创建Weightweight = 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 = 0range_max = 1init_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_epsionweight.set_value(rand)weights.append(weight) #加入到weights集合中weight_index = weight_index + 1print("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节点。
1weights = 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。
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的信息。
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 + 1print("")……
至此,我们已经初步实现了NetworkStructure.py神经元节点构建、NetworkConnection.py神经元网络层次的权重Weight连接 。
欢迎关注微信公众号:“从零起步学习人工智能”。

喜欢我们发布的信息,就在右下角点一下“在看”吧!欢迎转发分享!
最后
以上就是爱笑柜子最近收集整理的关于(9):神经元网络层次的权重Weight连接的全部内容,更多相关(9):神经元网络层次内容请搜索靠谱客的其他文章。
发表评论 取消回复