【问题标题】:style transfer implementation tensorflow风格迁移实现tensorflow
【发布时间】:2017-05-17 15:51:38
【问题描述】:

Here,我看了一些风格迁移的tensorflow实现。 具体来说,它定义了要优化的损失。在一个损失函数中,它说: `

def sum_style_losses(sess, net, style_imgs):
  total_style_loss = 0.
  weights = args.style_imgs_weights
  for img, img_weight in zip(style_imgs, weights):
    sess.run(net['input'].assign(img))
    style_loss = 0.
    for layer, weight in zip(args.style_layers, args.style_layer_weights):
      a = sess.run(net[layer])
      x = net[layer]
      a = tf.convert_to_tensor(a)
      style_loss += style_layer_loss(a, x) * weight
    style_loss /= float(len(args.style_layers))
    total_style_loss += (style_loss * img_weight)

`

使用当前会话调用优化器:

optimizer.minimize(sess)

因此会话已启动并正在运行,但在运行期间,它会在 for 循环中进一步调用 runs。任何人都可以解释张量流逻辑,特别是为什么x 包含输入图像的特征向量(而不是样式图像)。对我来说,似乎有两个runs 并行。

【问题讨论】:

    标签: python tensorflow deep-learning


    【解决方案1】:

    来自github repo的代码如下:

    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    sess.run(net['input'].assign(init_img))
    optimizer.minimize(sess)
    

    session 安排在设备上运行的操作并保存一些变量。它可用于跨不同(子)图安排许多操作。所以在session上面的代码中

    1. 初始化变量。
    2. 将图像分配给符号输入张量。请注意,您也可以为此 use feeds
    3. 使用 scipy 的优化器进行最小化(已经在其构造函数中传递了一个损失...更多详细信息,请参见 here)。

    在每个阶段,会话负责调度子图的执行,以允许在该阶段发生的计算。

    【讨论】:

    • 我很清楚。所以当minimize实际运行时,它调用了损失函数。在这里,开始了另一个运行,但仍然必须有最小化器运行的状态才能获得x=net[layer]。前面的语句,即a=...,也在同一层计算net,但不干扰x=...。所以我的问题是 tensorflow 如何处理这种情况。是否构造了新的子图?
    • 图只构建一次...会话可以根据所需的输出执行图的不同部分(子图)。您可以使用tensorboard 检查子图。查看示例here
    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多