我有两个Keras模型,我们称它们为model1和model2。两种模型都是一个简单的感知器。这是设置模型1的代码; 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'])
我想在训练它们后将这两个模型混合使用,以使得到的模型是对model1和model2的权重和偏差的随机采样。因此,例如,如果权重由[x1,x2,x3,x4 ...]和[y1,y2,y3.y4 ...]表示,则结果将是[x1,y2,y3 ,x4 ...]
我已经研究了Keras的合并层,但是在API中看不到实现此目的的明确方法。我正在寻找关于如何建立一个新模型的见识,该模型包括对model1和model2的权重和偏差的随机〜50/50拆分。关于如何实现此目标的任何想法?
答案 0 :(得分:0)
好吧,在又一个星期在桌子上殴打我的头之后,我终于意识到自己有多沉迷。这是我用来解决此问题的函数,它是如此的简单。
#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都作为一个组移动到新模型中。我将构建一个将所有权重都随机化的版本,但这是一个很好的开始。