与Keras进行OR-Lambda-Layer操作

时间:2018-11-16 15:15:34

标签: python tensorflow keras keras-layer

我正在用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)。现在,我有了更大的东西,并且正在使整个过程自动化。

简单网络的可视化: 缓冲区只是转发值,或者正在对输入进行“或”运算。

Visualization of the layers

我如何在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]
]

但是我仍然遇到问题,无法将它们合并在一起,我基于这个新主题提出了一个新问题。

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,我需要对Neurules层进行排序,分割,然后对每个分割分别使用一个Lambda层,进行一些处理,如问题的编辑部分所示:标准化输入,使用backend.any,然后将TrueFalse投射回浮动。