通常的做法是将你的 VGG 附加到模型的末尾,确保它的所有层trainable=False
在编译之前都有。
然后你重新计算你的 Y_train。
假设您有这些模型:
mainModel - the one you want to apply a loss function
lossModel - the one that is part of the loss function you want
创建一个将一个附加到另一个的新模型:
from keras.models import Model
lossOut = lossModel(mainModel.output) #you pass the output of one model to the other
fullModel = Model(mainModel.input,lossOut) #you create a model for training following a certain path in the graph.
该模型将具有完全相同的 mainModel 和 lossModel 权重,并且训练该模型会影响其他模型。
在编译之前确保 lossModel 不可训练:
lossModel.trainable = False
for l in lossModel.layers:
l.trainable = False
fullModel.compile(loss='mse',optimizer=....)
现在调整您的训练数据:
fullYTrain = lossModel.predict(originalYTrain)
最后进行训练:
fullModel.fit(xTrain, fullYTrain, ....)