1

我正在关注关于神经风格迁移的教程。风格转移是通过最小化图像的损失函数来完成的(用内容图像初始化)。让我感到困惑的是以下代码:

preprocessed_input = tf.keras.applications.vgg19.preprocess_input(inputs)

这是类中call方法的一部分StyleContentModel。TensorFlow 是如何知道这个操作的梯度的?我已经检查了这个操作是否get_gradient_function在模块tensorflow.python.framework.ops中使用了渐变函数,据我所知没有。

4

2 回答 2

0

这与模型或梯度无关。这个函数的作用是缩放输入图像,使像素在 -1 到 +1 的范围内。这是迁移学习中使用的许多模型(如 VGG 和 MobileNet)的共同要求。如果你使用 ImageDataGenerator 它有一个参数 preprocessing_function ,生成器调用它来预处理图像。确保如果您预处理训练图像,您对测试和验证图像执行相同的操作。

于 2020-10-09T00:50:46.690 回答
0

很简单,函数内部使用可微分的符号张量运算。TensorFlow 可以通过内部使用 TensorFlow 操作的函数计算梯度,无需为每个函数手动定义梯度。

您可以在此处查看该函数的代码来确认,特别是如果您查看使用普通标量操作和 Keras 后端函数(它们只是 TensorFlow 中的函数)的_preprocess_symbolic_function 此处tf.keras

于 2020-10-09T01:08:19.037 回答