使用自动编码器而不是图像分类器(VGG-16)来计算感知损失

时间:2018-12-10 05:32:39

标签: python-3.x deep-learning autoencoder vgg-net generative-adversarial-network

对于训练生成对抗网络,我正在使用Perceptual_Loss函数。 Perceptual_Loss是一种函数,用于在识别出图像特征之后,查找两个图像是否看起来彼此相似。如here所述,我们可以使用图像分类器和自动编码器来识别特征。大多数开发人员使用 VGG16 作为图像分类器来计算Perceptual_Loss。我想为此使用预训练的自动编码器(由我自己训练)。使用预先训练的自动编码器权重,我将以下原始Perceptual_Loss函数更改为

                     #### Original Perceptual Loss Function ####

from keras.applications.vgg16 import VGG16
def perceptual_loss(y_true, y_pred):
    vgg = VGG16(include_top=False, weights='imagenet', input_shape=(256,256,3))
    loss_model = Model(inputs=vgg.input, outputs=vgg.get_layer('block3_conv3').output)

    loss_model.trainable = False

    return K.mean(K.square(loss_model(y_true) - loss_model(y_pred))) 

                    #### My Perceptual Loss Function ####

trained_autoencoder=load_model('Path/AutoEncoder_Model.h5')
trained_autoencoder.compile(loss='mean_squared_error', optimizer='adadelta')
def perceptual_loss(y_true, y_pred):
  return K.mean(K.square(trained_autoencoder.predict(y_true) - trained_autoencoder.predict(y_pred)))

但这给了我这个错误

**When feeding symbolic tensors to a model, we expect thetensors to have a static batch size. Got tensor with shape: (None, None, None, None)**

0 个答案:

没有答案