我正在学习有关神经风格转换的教程。通过最小化关于图像(用内容图像初始化(的损失函数来完成风格转移。让我困惑的是以下代码:
preprocessed_input = tf.keras.applications.vgg19.preprocess_input(inputs)
其是CCD_ 2类中的CCD_。TensorFlow如何知道此操作的梯度?我已经在模块tensorflow.python.framework.ops
中使用get_gradient_function
检查了这个操作是否有梯度函数,据我所知没有。
非常简单,函数内部使用可微的符号张量运算。TensorFlow可以通过内部使用TensorFlow操作的函数来计算梯度,无需为每个函数手动定义梯度。
您可以通过查看此处该函数的代码来确认,特别是如果您查看此处的_preprocess_symbolic_function
,它使用正常的标量运算和Keras后端函数(它们只是tf.keras
中的TensorFlow函数(。
这与模型或渐变无关。这个函数的作用是缩放输入图像,使像素在-1到+1的范围内。这是迁移学习中使用的许多模型(如VGG和MobileNet(的常见要求。如果使用ImageDataGenerator,它有一个参数preprocessing_function,生成器调用该函数来预处理图像。如果对训练图像进行预处理,请确保对测试和验证图像也进行预处理。