首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tensorflow中使用预训练模型作为不可训练子网络?

如何在tensorflow中使用预训练模型作为不可训练子网络?
EN

Stack Overflow用户
提问于 2016-02-03 23:18:52
回答 1查看 2.6K关注 0票数 4

我想训练一个包含一个子网络的网络,我需要在训练期间保持固定。其基本思想是在预先训练好的网络(inceptionV3)中预先添加和附加一些层。

代码语言:javascript
复制
new_layers -> pre-trained and fixed sub-net (inceptionv3) -> new_layers

并为我的任务运行训练过程,而不改变预先训练的任务。我还需要直接在预先训练的网络的某一层上进行分支。例如,对于inceptionV3,我喜欢从conv 299x299到最后一个池层,或者从conv 79x79到最后一个池层。

EN

回答 1

Stack Overflow用户

发布于 2016-02-04 00:19:14

是否训练“层”取决于该层中使用的变量是否使用梯度进行更新。如果您使用Optimizer接口来优化您的网络,那么您可以简单地不将您想要保持固定的层中使用的变量传递给minimize函数,即,

代码语言:javascript
复制
opt.minimize(loss, <subset of variables you want to train>)

如果你直接使用tf.gradients函数,那么从tf.gradients的第二个参数中删除你想要保持固定的变量。

现在,如何“直接分支”到预先训练好的网络的某一层取决于该网络是如何实现的。我将简单地定位到您正在讨论的299x299层的tf.Conv2D调用,并将新层的输出作为其输入,在输出端,定位79x79层,将其输出用作新层的输入。

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

https://stackoverflow.com/questions/35180888

复制
相关文章

相似问题

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