卷积层的变量很容易复用。首先,定义一个包含卷积层的图,然后恢复它们的值。以下是伪代码
def network(your_inputs):
filter1 = tf.get_variable(shape=[filter_size, filter_size, in_channel, out_channel], name="vgg16/layer1")
features = tf.nn.conv2d(your_inputs, filter1, strides=[1,1,1,1])
filter2 = tf.get_variable(shape=[filter_size, filter_size, in_channel, out_channel], name="vgg16/layer2")
features = tf.nn.conv2d(features, filter2, strides=[1,1,1,1])
restore_filters = [filter1, filter2]
...
return logits, restore_filters
outputs, restore_filters = network(inputs)
saver = tf.train.Saver(restore_filters)
saver.restore(sess, "vgg-checkpoint.ckpt")
当然,您的过滤器大小必须与 VGG 网络相匹配。当您的变量名称与检查点文件的名称不同时,您可以将 Saver 与字典参数一起使用。