我是使用keras框架的新手。我已经阅读了一些关于如何使用keras中的Sequential和Graph类构建深度学习模型的示例。但是,我看到,如果我使用Sequential或Graph,它会独立地假设一个层的每个节点都与另一层的所有节点完全连接,不是吗?
我怀疑如下,如果我想构建一个没有完全连接的深度前馈网络,例如第二层的第一个节点没有连接到第三层的第二个节点......等等,即使我想在属于非连续层的节点之间添加连接(跳过连接),我如何在keras中实现它?
的奥斯卡
答案 0 :(得分:1)
您正在寻找在Keras中创建模型的最通用和最标准的方法:功能API Model
。
跳过连接
这些很容易。创建输入张量。将张量传递给图层,获得输出张量。使用连接或其他操作以后加入它们: #create输入张量 inputTensor = Input(someInputShape)
#pass the input into the first layer
firstLayerOutput = Dense(n1)(inputTensor)
#pass the output through a second layer
secondLayerOutput = Dense(n2)(firstLayerOutput)
#get the first output and join with the second output (the first output is skipping the second layer)
skipped = Concatenate()([firstLayerOutput,secondLayerOutput])
finalOutput = Dense(n3)(skipped)
model = Model(inputTensor,finalOutput)
在视觉上,这会创建:
input
|
Dense1
| \
Dense2 |
| |
\ /
Concat
|
Dense3
|
Output
自定义节点连接
如果您要更改图层的常规行为,这可能会更复杂。它需要自定义图层和自定义矩阵乘法等。
建议只是使用许多小图层,并根据需要制作尽可能多的跳过连接。许多具有1个节点的并行层表示具有许多节点的单个层。
因此,您可以创建大量Dense(1)
图层并将其视为节点。然后以任何你喜欢的方式连接它们。