添加Keras Lambda图层后获得新的输出?

时间:2018-09-20 00:10:22

标签: python tensorflow machine-learning keras keras-layer

在以下代码中,我有XEXWYEYW,形状为(474077, 32)(474077, 32),{{ 1}}和(474077, 1)

分别对32个输入和1个输出分别训练(474077, 1)modelE之后,我添加了一个modelW层,该层使两个模型的输出之间的差异最小。这段代码运行无误。

我假设此Lambda层更新LambdamodelE的权重和偏差以最小化它们的输出之间的差异。如何使用modelWmodelE的新更新权重和偏差来预测它们的新输出?我想比较模型的初始输出和modelW层最小化它们之间的差异之后的输出。

Lambda

我尝试过:

XtrainE, XtestE, YtrainE, YtestE = train_test_split(XE, YE, test_size=.5)
XtrainW, XtestW, YtrainW, YtestW = train_test_split(XW, YW, test_size=.5)

modelE = Sequential()
modelE.add(Dense(50, activation='relu', input_dim=32)) 
modelE.add(Dense(20, activation='relu')) 
modelE.add(Dense(1, activation='relu'))

modelW = Sequential()
modelW.add(Dense(50, activation='relu', input_dim=32)) 
modelW.add(Dense(20, activation='relu')) 
modelW.add(Dense(1, activation='relu'))

modelE.compile(loss='mse', optimizer='rmsprop')
modelW.compile(loss='mse', optimizer='rmsprop')

historyE= modelE.fit(XtrainE, YtrainE, validation_data=(XtestE,YtestE), epochs=200, batch_size=100, verbose=1)
historyW= modelW.fit(XtrainW, YtrainW, validation_data=(XtestW,YtestW), epochs=200, batch_size=100, verbose=1)

YpredE = modelE.predict(XtestE)  
YpredW = modelW.predict(XtestW)

difference = Lambda(lambda x: x[0] - x[1])([modelE.output, modelW.output])
diffModel = Model(modelE.inputs + modelW.inputs, difference)
diffModel.compile(optimizer = 'adam', loss='mse')
diffModel.fit([XE,XW], np.zeros(YE.shape), epochs=200, batch_size=100, verbose=1)

但这会为YpredWnew = modelW.predict(XtestW) YpredEnew = modelE.predict(XtestE) for i in range (len(YpredWnew)): print("oldE= %.2f, newE= %.2f, oldW= %.2f, newW= %.2f," % (YpredE[i], YpredWnew[i], YpredW[i], YpredWnew[i])) 中的所有i返回相同的值

谢谢

0 个答案:

没有答案