我正在用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?
如果有任何歧义,请告诉我。