我正在用Keras创建一个不同的项目,它是基于预定义知识(称为IF-THEN规则)的神经网络的开发,称为Neurules。我创建了一个Python模块,从给定的IF-THEN逻辑表达式训练我的每个神经元/神经元,毕竟我需要使用Keras将其创建为网络并重用此模型。
我已经用一个小例子进行了测试,它可以工作,手动添加所有内容,权重和偏见。现在,我已经更新了脚本,它给了我一个JSON,其中包含所有要添加到Keras的权重(到目前为止一直有效)。
这是我的问题,我的第一层有20个神经元(由IF-THEN创建的神经元),但我只有2种可能的输出,某些神经元/神经元给我output[0]
,其中一些{ {1}},我想在中间添加一个表示OR连接的层。
例如:
第1层: NEURON1,NEURON2,NEURON3
output[1]
由以下组成:Output[0]
NEURON1 or NEURON2
由以下组成:Output[1]
在我的第一个小例子中,我所做的是:我用预先开发的python模块创建并训练了OR神经元,然后在其中添加了第二层。然后,我将条目手动连接到“或”神经元(将权重放入正确的连接中,并在不影响“或”时将权重置为0)。现在,我有了更大的东西,并且正在使整个过程自动化。
简单网络的可视化: 缓冲区只是转发值,或者正在对输入进行“或”运算。
我如何在Keras中创建一个Lambda层,该Lambda层接收一些输出,处理逻辑或并连接到其中一个输出?
我发现了Backend函数:
NEURON2 or NEURON3
,但直到现在我都无法使用,应该如何使用?可能在Lambda层中,但是如何?
例如,我需要连接
tf.keras.backend.any
-> (NEURON1 or NEURON4 or NEURON5)
output[0]
-> (NEURON3 or NEURON6 or NEURON7)
在我的系统中,-1代表False,1代表True。 到目前为止,我已经保存了哪个神经元正在使用JSON数组中的2个输出中的每个输出,例如:
output[1]
我希望有人可以帮助我:)
编辑:提供一个更新,几天后我找到了一个解决方案,我将我的图层分为2层,并使用lambda图层进行了如下操作:
"secondLayerDescription": [
[0, 1, 4, 5, 6, 8, 12, 13, 14, 16, 18],
[2, 3, 7, 9, 10, 11, 15, 17, 19]
]
但是我仍然遇到问题,无法将它们合并在一起,我基于这个新主题提出了一个新问题。
答案 0 :(得分:0)
我找到了一种方法,我需要对Neurules层进行排序,分割,然后对每个分割分别使用一个Lambda层,进行一些处理,如问题的编辑部分所示:标准化输入,使用backend.any
,然后将True
或False
投射回浮动。