Tf-slim:ValueError:变量vgg_19/conv1/conv1_1 /权重已存在,不允许。你是否想在VarScope中设置reuse = True?

问题描述:

我正在使用tf-slim从几批图像中提取特征。问题是我的代码工作为第一批,在那之后,我得到的title.My代码中的错误是这样的:Tf-slim:ValueError:变量vgg_19/conv1/conv1_1 /权重已存在,不允许。你是否想在VarScope中设置reuse = True?

for i in range(0, num_batches): 
    #Obtain the starting and ending images number for each batch 
    batch_start = i*training_batch_size 
    batch_end = min((i+1)*training_batch_size, read_images_number) 
    #obtain the images from the batch 
    images = preprocessed_images[batch_start: batch_end] 
    with slim.arg_scope(vgg.vgg_arg_scope()) as sc: 
     _, end_points = vgg.vgg_19(tf.to_float(images), num_classes=1000, is_training=False) 
     init_fn = slim.assign_from_checkpoint_fn(os.path.join(checkpoints_dir, 'vgg_19.ckpt'),slim.get_model_variables('vgg_19')) 
     feature_conv_2_2 = end_points['vgg_19/pool5'] 

因此,大家可以看到,在每个批次,我选择了一组图像并使用vgg-19模型从pool5图层中提取特征。但是在第一次迭代之后,我在我尝试获取端点的行中出现错误。我在互联网上找到的一种解决方案是每次都重置图形,但我不想这样做,因为在我使用这些提取的特征进行训练的代码的后面部分中,我的图形中有一些权重。我不想重置它们。任何导致高度赞赏。谢谢!

您应该创建图一次,不在循环中。错误消息告诉你确切的 - 你试图建立两次相同的图。

所以应该(在伪代码)

create_graph() 
load_checkpoint() 

for each batch: 
    process_data() 
+0

所以基本上使用占位符输入到我的vgg.vgg_19对象,并在运行时正确传递图像占位符? –

+0

是的。这就是你在tf中传递数据的方式。 – lejlot