我正在为我的算法做一些评估,我通过计算两个图像之间的3种不同类型的损失来比较一些生成的图像和地面实况图像.代码的逻辑是:
如下所示,每次迭代的代码运行时间都在增加.这使得代码无法在合理的时间内完成运行.可能是什么导致了这个?
代码包含在下面.此外,我正在使用爱德华图书馆的Tensorflow,如果这是相关的.我使用以下命令创建会话:
sess = ed.get_session()
Run Code Online (Sandbox Code Playgroud)
开始评估...... 100%|██████████████████████████████████████████ ███| 40/40 [01:36 <00:00,2.53s/it] ----------摘要图片001 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [01:44 <00:00,2.61s/it] ----------摘要图片002 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [01:57 <00:00,3.59s/it] ----------摘要图003 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [02:16 <00:00,3.34s/it] ----------摘要图004 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [02:25 <00:00,3.56s/it] ----------摘要图005 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [02:45 <00:00,4.00s/it] ----------摘要图006 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [02:54 <00:00,4.19s/it] ----------摘要图007 ------------开始评价...... 100%| █████████████████████████████████████████████| 40/40 [03:11 <00:00,4.58s/it] ----------摘要图片008 ------------开始评价...... 100%| ████████████████████████████████████████████| 40/40 [03:26 <00:00,5.02s/it] ----------摘要图片009 ------------开始评价...... 100%| ████████████████████████████████████████████| 40/40 [03:38 <00:00,5.58s/it] ----------摘要图片010 ------------开始评价...... 100%| ████████████████████████████████████████████| 40/40 [03:51 <00:00,5.77s/it]
for i in range(inference_batch_size):
compare_vae_hmc_loss(model.decode_op, model.encode_op, model.discriminator_l_op,
x_ad[i:i+1], samples_to_check[:, i, :], config)
def compare_vae_hmc_loss(P, Q, DiscL, x_gt, samples_to_check, config):
print ("Starting evaluation...")
x_samples_to_check = ...
for i, sample in enumerate(tqdm(x_samples_to_check)):
for j in range(sample_to_vis):
plot_save(x_samples_to_check[j], './out/{}_mcmc_sample_{}.png'.format(img_num, j + 1))
avg_img = np.mean(x_samples_to_check, axis=0)
plot_save(avg_img, './out/{}_mcmcMean.png'.format(img_num))
r_loss = recon_loss(x_gt, sample)
l_loss = l2_loss(x_gt, sample)
lat_loss = l_latent_loss(l_th_x_gt, l_th_layer_samples[i:i+1])
total_recon_loss += r_loss
total_l2_loss += l_loss
total_latent_loss += lat_loss
if r_loss < best_recon_loss:
best_recon_sample = sample
best_recon_loss = r_loss
if l_loss < best_l2_loss:
best_l2_sample = sample
best_l2_loss = l_loss
if lat_loss < best_latent_loss:
best_latent_sample = sample
best_latent_loss = lat_loss
def l2_loss(x_gt, x_hmc):
if jernej_Q_P:
return tf.norm(x_gt - x_hmc).eval()
else:
return tf.norm(x_gt-x_hmc).eval()
def recon_loss(x_gt, x_hmc):
if jernej_Q_P:
return tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(logits=x_hmc, labels=x_gt), 1).eval()
else:
return tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(logits=x_hmc[1], labels=x_gt), 1).eval()
def l_latent_loss(l_th_x_gt, l_th_x_hmc):
return tf.norm(l_th_x_gt - l_th_x_hmc).eval()
Run Code Online (Sandbox Code Playgroud)
问题在于,您在处理的每个样本中都会向图形中添加新的操作 - 该compare_vae_hmc_loss函数每次执行时都会添加新节点(它调用tf.函数).这意味着您的图表越来越大,占用的内存也越来越多.
您需要做的是定义一次计算图,然后多次调用它.所有这些调用return tf.norm(x_gt-x_hmc).eval()都在图中创建一个永久存在的新节点.相反,您应该保存您创建的节点一次,记住python变量,然后在每次需要时拉动该节点.
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |