Keras 使用某些未连接的神经元创建自定义网络

数据挖掘 神经网络 喀拉斯
2021-09-21 15:12:33

我正在尝试创建一个自动编码器,其中一些输入可以影响其他输入,但反之则不然。下图给出了一个例子。我研究了定义我自己的 Keras 层,但不知道如何进行。自定义选择性连接神经网络

2个回答

相信您可以使用功能 API 并使用您的输入来做到这一点。假设您有输入特征集(可以是单例集)a,b,和 c 对于一些 xX. 如果您将输入拆分为Xa, Xb, 和 Xc, 其中所有元素 x 被转换为仅包含 a,理论上可以建立这个模型。

这是一个演示这个想法的代码片段,给定Xa, Xb, 和 Xc,以及它们对应的形状。您可以通过扩展全连接层(通过在密集调用中将变量设置为 1)来扩展此模型。没有对代码工作的承诺:我已经刷过一些细节,但这应该让你开始解决你的问题。

input_A = Input(shape=shape_A)
input_B = Input(shape=shape_B)
input_C = Input(shape=shape_C)
A = Dense(1)(input_A)
A = Dense(1)(A) 
B = Merge([input_A, input_B, input_C], mode='concat')
B = Dense(1)(B) 
C = Merge([A,B],mode='concat)
C = Dense(1)(C)
B = Merge([A,B],mode='concat)
B = Dense(1)(B)
A = Dense(1)(A)

从这里,如果你想要一个输出,你可以调用 merge onA, B, 和 C然后使用例如用于多标签分类的 Softmax 层添加密集(全连接)层。

Keras 确实提供了添加自定义层的机会。我不知道以前的版本,但 Keras 1.1.3 可以灵活地做到这一点。看看这个链接这也包含自定义层的一个很好的例子。在这里,您可以尝试根据需要更改权重矩阵。我还建议您尝试阅读一些基本层的源代码以更好地理解它。