如何同时训练两个神经网络以最小化它们之间的输出差异?

时间:2018-08-02 12:26:25

标签: python tensorflow machine-learning keras

对于每个事件/样本,我都有一组值x1,x2,y1,y2,z,k。我有2个神经网络,我想接受两个阶段的训练。第一个神经网络将x1,x2作为输入和输出z。第二个神经网络以y1,y2作为输入和输出k。

第一阶段: 分别训练输入为x1,x2的第一个神经网络以输出z和输入为y1,y2的第二个神经网络以输出k。

第二阶段: 在这里,我准备放开z和k,并且正在寻找一个介于z和k之间的值h。因此,在此阶段,我想训练两个神经网络以最小化它们的输出之间的差异(即,对于每个时期,在NN2的输出上训练NN1,在NN1的输出上训练NN2。更新每个神经网络的权重和偏差。然后,使用新的权重和偏差为每一个计算新的输出,然后经历另一个时期,以NN2的新输出训练NN1,并以NN1的新输出训练NN2)

什么机器学习软件包允许我这样做。我熟悉Keras(带有TensorFlow后端)。在Keras可能吗?如果没有,在TensorFlow中可以吗?

谢谢

1 个答案:

答案 0 :(得分:0)

假设两个模型分别为model1model2

让我们创建一个计算其输出之间差异的层:

from keras.layers import Lambda

difference = Lambda(lambda x: x[0] - x[1])([model1.output, model2.output])

然后,让我们建立一个输出差异的模型。

#if your models have one input each, (if x1 and x2 are elements in the input array)
diffModel = Model([model1.input, model2.input], difference)

#if your models have two inputs (if x1 and x2 are two input tensors)    
diffModel = Model(model1.inputs + model2.inputs, difference)

让我们编译此模型,选择一个损失以将差异与0进行比较:

diffModel.compile(optimizer = 'adam', loss='mse')

让我们训练它的输出为零:

#if models with one input:
diffModel.fit([x,y], np.zeros(shape))

#if models with two inputs:
diffModel.fit([x1,x2,y1,y2], np.zeros(shape))