首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能恢复Tensorflow中任何层的部分值?

是否有可能恢复Tensorflow中任何层的部分值?
EN

Stack Overflow用户
提问于 2019-09-30 08:18:00
回答 1查看 45关注 0票数 1

对于图像任务,我使用了deeplab V3结构,但是我做了一个细微的更改,在输入时添加了一个通道。所以CNN的第一层变成了7,7,4,64,而不是7,7,3,64。

我计划做传输学习,所以我希望恢复所有的参数,除了第一层的第四个频道,但这四个频道被一个tf.Variable掌握,所以我不知道如何通过tf.train.Saver恢复它们。(tf.train.Saver可以控制应该恢复哪个tf.Variable,但不能控制任何tf.Variable的值)

有什么想法吗?

与此相关的一些代码如下:

  1. 负载函数

代码语言:javascript
复制
def load(saver, sess, ckpt_path):
    saver.restore(sess, ckpt_path)

  1. 主功能

的一部分

代码语言:javascript
复制
# 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)

在主函数中,我们可以看到恢复的变量是由“恢复”控制的。在这种情况下,“还原”的第一个条目是:

代码语言:javascript
复制
<tf.Variable shape=(7,7,4,64) dtype=float32_ref>

但我只希望从另一种模式中恢复前三条通道,即大小(7,7,3,64)。并使用零初始化器初始化最后一个通道。

有什么功能能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-30 14:47:41

一种可能的快速攻击可能是,而不是创建一个新形状的变量,并尝试将其部分转换过来,只需创建一个缺少的变量(所以是shape=7,7,1,64),然后将它与变量连接起来,并使用它作为卷积内核。

为了使传输学习正常工作,这应该是零输入的,而不是随机变量(因为其他值不对称),或者用与预先训练过的值相比非常小的值初始化(假设新的通道具有相同的值范围),否则后面的层将看不到他们期望的分布。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58163964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档