我有两个Keras模型,让我们称它们为model1和model2。两种型号都是简单的感知器。这是设置model1的代码; model2是完全相同的。
model1 = keras.Sequential([
keras.layers.Dense(100, activation=tf.nn.relu),
keras.layers.Dropout(0.5, noise_shape=None, seed=None),
keras.layers.Dense(26, activation=tf.nn.softmax)
])
model1.compile(optimizer='sgd',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
我想在训练它们之后混合这两个模型,这样得到的模型是模型1和模型2的权重和偏差的随机抽样。因此,例如,如果权重由[x1,x2,x3,x4 ...]和[y1,y2,y3.y4 ...]表示,则结果将是[x1,y2,y3]的随机组合,x4 ......]
我已经研究过合并Keras的层次,但是没有看到在API中实现这一点的明确方法。我正在寻找有关如何构建一个新模型的见解,该模型包含模型1和模型2的权重和偏差的随机~50 / 50分割。有关如何实现这一目标的任何想法?
Aight,经过一个星期的撞击桌子后,我终于意识到我正在做多少事情。这是我为解决这个问题所做的功能,它简直令人难以置信。
#Initialize and train model1 and model2, they are the inputs to this function.
def mateKerasNN(net1,net2):
net1weights = net1.get_weights()
net2weights = net2.get_weights()
net3weights = net1.get_weights()
for i in range(len(net1weights)):
for j in range(len(net1weights[i])):
net3weights[i][j] = random.choice([net1weights[i][j],net2weights[i][j]])
return net3weights
model3weights = mateKerasNN(model1,model2)
model3.set_weights(model3weights)
注意,这实际上将每个神经元的权重随机化为一组。因此,具有40个权重的神经元1作为一组移动到新模型中,神经元2到784也是如此。我将构建一个所有权重随机化的版本,但这个代码是一个好的开始。