【发布时间】:2019-10-01 14:43:14
【问题描述】:
我正在为图像任务使用 deeplab V3 结构,但我做了一点改动,在输入端添加了一个通道。这样第一个 CNN 层就变成了 [7,7,4,64] 而不是 [7,7,3,64]。
我打算做迁移学习,所以我希望恢复除了第一个CNN层的第四个通道之外的所有参数,但是这四个通道由一个tf.Variable掌握,所以我不知道如何恢复它们通过 tf.train.Saver。 (tf.train.Saver 可以控制应该恢复哪个 tf.Variable 但我认为不能控制任何 tf.Variable 的某些值)
有什么想法吗?
部分相关代码如下:
- 加载函数
def load(saver, sess, ckpt_path):
saver.restore(sess, ckpt_path)
- 主要功能的一部分
# All variables need to be restored
restore = [v for v in tf.global_variables()]
# Set up tf session and initialize variables
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config = config)
init = tf.global_variables_initializer()
sess.run(init)
# Load Variables
loader = tf.train.Saver(var_list = restore)
load(loader, sess, args.restore_from)
在 main 函数中,我们可以看到恢复的变量是由 'restore' 控制的。在这种情况下,'restore' 的第一个条目是:
<tf.Variable shape=(7,7,4,64) dtype=float32_ref>
但我只希望从另一个模型中恢复前三个通道,它的大小为 (7,7,3,64)。并用零初始化器初始化最后一个通道。
任何功能都可以帮助解决这个问题?
【问题讨论】:
-
请输入您的代码以便更好地解释您的情况,以便我们为您提供帮助
-
感谢您的回复。我已经放了一些代码。如果不够详细,请告诉我。
标签: tensorflow