我想将模型提取特征的距离用作损失函数的一部分,类似于this paper中关于感知损失的描述。
我主要使用带有Tensorflow的Keras作为后端。如果我有Keras预先训练的模型,则可以将其输出用作此类自定义损失的一部分:(示例来自GAN代码,但我不认为会失去一般性)
discriminator = DiscriminatorCNN(...) #returns Keras Model
discriminator.compile(...)
def adversary_loss_factory(discriminator):
def adversary_loss(y_true, y_pred):
prediction = discriminator(y_pred)
prediction = -1 * K.log(prediction)
return prediction
return adversary_loss
然后adversary_loss可以用作其他模型的损失。
我的问题是,我正在使用的特定的预训练模型仅可用作Tensorflow模型。我认为可以这样做,因为它是相同的后端,但是我不确定如何开始。
我正在使用this repository中的代码,看来您可以在正确加载模型后通过此代码获得嵌入层:
embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")
我知道您可以使用sess.run来获取特定批次的嵌入内容,但这似乎并没有区别,以至于将其放入自定义损失中。有没有办法将这些嵌入转换成类似Keras模型的功能?