恢复图层时使用“ var_list”

时间:2018-09-06 15:47:41

标签: tensorflow

假设我的网络定义如下:

image_input_1 = tf.layers.conv2d(name='image_input_1', inputs=self.batch_images, filters=30, kernel_size=[3, 3], strides=(2, 2), padding='same', activation=tf.nn.relu)
image_input_2 = tf.layers.conv2d(name='image_input_2', inputs=image_input_1, filters=50, kernel_size=[3, 3], strides=(2, 2), padding='same', activation=tf.nn.relu)

然后我训练该网络,并使用以下命令保存其参数:

self.saver = tf.train.Saver()
saver.save(sess, save_directory)

我现在想使用相同的网络架构,但是我想为image_input_1层加载预先训练的权重和偏差(我不想为image_input_2层执行此操作,因为这些将被随机初始化)。

我尝试了以下方法:

loader = tf.train.Saver(var_list=[image_input_1])
loader.restore(sess, tf.train.latest_checkpoint(save_directory))

但这给我一个错误:

TypeError: Variable to save is not a Variable: Tensor("image_input_1/Relu:0", shape=(?, 50, 38, 30), dtype=float32)

因此,看来我不能仅将var_list作为参数传递给该层,因为这不是变量。相反,我需要在该层中传递实际变量。

因此,我尝试:

loader = tf.train.Saver(var_list=[image_input_1/kernel:0, image_input_1/bias:0])
loader.restore(sess, tf.train.latest_checkpoint(save_directory))

但这也给我一个错误:

SyntaxError: invalid syntax

因为image_input_1/kernel:0image_input_1/bias:0实际上不是我的代码中定义的变量。

那我应该传递给var_list呢?

0 个答案:

没有答案