我认为这是可能的。我不知道它对你的效果如何,但我认为这在技术上是可行的(这是最好的)。
对于初学者,我建议使用Keras 的功能 API 来处理这类事情。它使像这样的网络组合变得非常容易,并且像GitHub 上的这种实现这样的残差网络以类似的方式组合。类似以下的内容可能会让您继续前进(请注意,这并不是一个完整的解决方案,抱歉):
from keras.layers import Input, Dense
from keras.models import Model
def single_net(input_shape, filters):
def f(input):
h0 = Dense(filters, activation='relu')(input)
h1 = Dense(filters, activation='relu')(h0)
prediction = Dense(2, activation='softmax')(h1)
return prediction
return f
input_a = Input(shape=input_shape) # whatever your input shape is
input_b = Input(shape=input_shape)
# ... repeat for however many people you have ...
shared_net = single_net(input_shape, filters) # define once
network0 = shared_net(input_a)
network1 = shared_net(input_b)
# ... again repeat for each person
combined_nets = keras.layers.concatenate([network0, network1, ...])
dense = Dense(output_shape, activation='relu')(combined_nets) # or however you want to combine them
model = Model(inputs=[input_a, input_b, ...], outputs=dense)
model.compile(optimizer='adam', loss='binary_crossentropy') # whatever optimizer, loss you like
model.fit([data_a, data_b, ...], labels, ...)
通过仅定义一次重复网络(shared_net如上),然后为每个输入使用相同的对象,您将在所有这些输入中共享这些层。基本上,当您反向传播时,所有输入/输出都将训练网络的单个实例,即使您基本上对每个输入都使用它的副本。
最大的问题是如何组合所有单独的模型,以及如何处理不断变化的模型数量。我不知道如何处理不确定数量的模型,但我建议查看 Keras 功能 API 文档的共享层部分以获取有关组合的一些帮助,并深入研究 GitHub 上的一些示例。此处显示的内容应该可以帮助您入门,但可能始终隐藏着一些错误。就像我说的,不是一个完整的答案,对不起。