如何解释sess.run()在做什么?

时间:2019-05-29 08:51:59

标签: python tensorflow

我正在用Gatys等人的“神经风格转换”算法进行练习。 (2015)(https://arxiv.org/abs/1508.06576)使用张量流。在这里,我很难理解sess.run()在做什么,这在代码中多次发生。

正如论文所建议的,生成的图像必须分别与输入内容图像和输入样式图像一起计算。


首先计算内容成本,

tf.reset_default_graph()

sess = tf.InteractiveSession()  

# load the weights of vgg to form a model
model = load_vgg_model("imagenet-vgg-verydeep-19.mat")

sess.run(model['input'].assign(content_image))

out = model['conv4_2']

a_Content = sess.run(out)

a_Generate = out

# Compute the content cost
J_content = compute_content_cost(a_Content, a_Generate)

为简单起见,省略了J_style的计算

然后

J = total_cost(J_content, J_style, alpha=10, beta=40)

optimizer = tf.train.AdamOptimizer(2.0)

train_step = optimizer.minimize(J)

然后定义model_nn(),

def model_nn(sess, input_image, num_iterations = 200):

    sess.run(tf.global_variables_initializer())

    model['input'].assign(input_image)

    for i in range(num_iterations):
        sess.run(train_step)

        generated_image = sess.run(model['input'])


        if i%20 == 0:
            Jt, Jc, Js = sess.run([J, J_content, J_style])

最后,运行model_nn()训练网络model_nn(sess, generated_image)


这是我的问题
首先sess.run(out)out有什么区别?
第二,为什么model['input'].assign(content_image)首先放在sess.run(model['input'].assign(content_image))中,而后来在sess.run()中与model_nn()分开呢?
第三,如何指定sess.run(model['input'])生成Generated_image?

如果有任何歧义,请告诉我。

0 个答案:

没有答案