对于每个事件/样本,我都有一组值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中可以吗?
谢谢
答案 0 :(得分:0)
假设两个模型分别为model1
和model2
。
让我们创建一个计算其输出之间差异的层:
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))