keras 风格转移示例有一个无法解释的常数
Posted
技术标签:
【中文标题】keras 风格转移示例有一个无法解释的常数【英文标题】:keras style transfer example has an unexplained constant 【发布时间】:2021-05-04 13:56:27 【问题描述】:我正在关注神经风格迁移的 keras 示例,在风格损失函数中它们除以数字 4,我已经阅读了 Gatys 等人的原始论文。和其他文章在寻找这个整数的含义及其对整个过程的贡献,但找不到解释。
代码来自:https://keras.io/examples/generative/neural_style_transfer/
有人知道是什么吗?
def style_loss(style, combination):
S = gram_matrix(style)
C = gram_matrix(combination)
channels = 3
size = img_nrows * img_ncols
return tf.reduce_sum(tf.square(S - C)) / (4.0 * (channels ** 2) * (size ** 2))
【问题讨论】:
【参考方案1】:你可以在A Neural Algorithm of Artistic Style的原论文中找到他们这样做的原因,总之,人们这样做主要是因为在计算损失梯度之后,常数值会被抵消,所以公式会更好看。
Flij
是第l层位置j处第i个过滤器的激活
Nl
和 Ml
是第 l 层特征图的数量和高度乘以特征图的宽度,El
是第 l 层的样式损失
如你所见,常数值被抵消了
当然你可以在不取消梯度的常数值的情况下进行数学运算,毕竟它只是一个常数值,不会对结果产生太大影响
Paper 对内容损失的处理与样式损失相同:
Plij
是l层内容图像的特征表示
虽然keras example of neural style transfer 中的代码没有取消内容丢失的常数值:
def content_loss(base, combination):
return tf.reduce_sum(tf.square(combination - base))
或者你可以认为它使用content_weight
来抵消常量值:
loss = loss + content_weight * content_loss(
base_image_features, combination_features
)
【讨论】:
以上是关于keras 风格转移示例有一个无法解释的常数的主要内容,如果未能解决你的问题,请参考以下文章
《Python 深度学习》刷书笔记 Chapter 8 Part-3 神经网络风格转移