Получаете новые результаты после добавления слоя Keras Lambda? - PullRequest
0 голосов
/ 20 сентября 2018

В следующем коде у меня есть XE, XW, YE и YW фигур (474077, 32), (474077, 32), (474077, 1) и (474077, 1) соответственно.

После отдельного обучения modelE и modelW на 32 входах и 1 выходе каждый, я добавляю слой Lambda, который минимизирует разницу между выходами обеих моделей.Этот код выполняется без ошибок.

Я предполагаю, что этот слой Lambda обновляет весовые коэффициенты и смещения modelE и modelW, чтобы минимизировать разницу между их выходными данными.Как я могу использовать новые обновленные веса и смещения modelE и 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 в YpredEnew[i]

Спасибо

...