TensorFlow中的样式转移

时间:2016-11-28 17:30:29

标签: tensorflow conv-neural-network

我无法理解使用TensorFlow在样式传输算法中训练内容和样式过滤器的方式(例如 in this paper )。 我已经在链接文章中检查了算法的一些实现,但我不能完全理解他们对这一步骤的处理。为此,我认为在不使用预先训练的模型的情况下,有助于实现一个天真的版本。我对所涉及步骤的理解是:

  1. 在单张图像上训练CNN(在他们使用预训练的VGG网络的论文中)
  2. 使用经过训练的网络,输入白噪声图像。定义一个新的损失函数,通过更新输入图像来最小化(这是图像被“绘制”的方式),例如'content'是通过最小化训练模型中的conv层与输入(白噪声)图像产生的那些之间的距离得出的
  3. 因此,实现应该是这样的:

    import TensorFlow as tf
    
    x_in = tf.placeholder(tf.float32, shape=[None, num_pixels], name='x')
    y_ = tf.placeholder(tf.float32, shape=[None, num_pixels], name='y')
    
    ...
    
    diff = y_-y_out
    loss = tf.reduce_sum(tf.abs(diff))  # minimizing 'pixel difference'
    train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
    # training model
    for i in range(NUM_TRAINING_STEPS):
        _, loss_val = sess.run([train_step, loss], 
                               feed_dict={x_in: input_image, y_: input_image})
    

    训练模型后,我可以生成白噪声图像,但是如何使用训练模型更新输入图像?我怀疑是我需要创建第二个网络,其中x_in的类型为tf.Variable,并加载训练模型中的权重和偏差,但这个细节让我望而却步。

2 个答案:

答案 0 :(得分:0)

是的,您可以将输入图像存储在tf.Variable中,从训练模型中加载权重,然后使用样式传输损失函数wrt运行优化循环到输入变量。

答案 1 :(得分:0)

您可以使用样式转移作为服务网站来训练http://somatic.io

等样式