首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改TensorFlow-Hub模块中的可训练tf.Variables以使用自定义内核初始化器?

如何修改TensorFlow-Hub模块中的可训练tf.Variables以使用自定义内核初始化器?
EN

Stack Overflow用户
提问于 2019-02-11 12:06:22
回答 1查看 510关注 0票数 1

我想从头开始训练一个InceptionV3神经网络。我已经有一个正在运行的实现,它利用这个TensorFlow集线器模块:https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1,并利用包含的预先训练好的权重执行微调。

我现在想使用the same TensorFlow Hub module,但放弃了提供的权重,并使用我自己的内核初始化器(例如,tf.initializers.truncated_normal,tf.initializers.he_normal等)。

如何修改TFHub模块中的可训练变量以使用自定义初始化器?为了清楚起见,我希望在运行时替换预先训练好的权重,并且只保留模型架构。如果我真的应该使用TFSlim或者模型动物园,请让我知道。

这是我到目前为止所知道的:

代码语言:javascript
复制
import tensorflow as tf
import tensorflow_hub as hub

tfhub_module_url = 'https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1'
initializer = tf.truncated_normal

def main(_):
    _graph = tf.Graph()
    with _graph.as_default():
        module_spec = hub.load_module_spec(tfhub_module_url)
        height, width = hub.get_expected_image_size(module_spec)
        resized_input_tensor = tf.placeholder(tf.float32, [None, height, width, 3], name='resized_input_tensor')
        m = hub.Module(module_spec, trainable=True)
        bottleneck_tensor = m(resized_input_tensor)
        trainable_vars = tf.trainable_variables()
        # TODO: This fails, because this probably isn't how this is supposed to be done:
        for trainable_var in trainable_vars:
            trainable_var.initializer = tf.initializers.he_normal

    with tf.Session(graph=_graph) as sess:
        print(trainable_vars)


tf.logging.set_verbosity(tf.logging.INFO)
tf.app.run()

这样做的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-15 01:57:54

没有直接的方法来做你想做的事情,因为TF Hub模块实际上是为了表示预先训练的模型片段而构建的。如果你只想要图形,你可以直接使用tensorflow_models/slim代码。(或者,您可以修补tensorflow_hub库代码,使其不会在一开始就使用还原操作重新连接变量初始化器。)

编辑2019-04-15:另请参阅tensorflow_hub issue #267:在TF2中,初始化器的概念正在消失,因此TF Hub的作者不想在TF1应用程序接口中依赖它。

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

https://stackoverflow.com/questions/54623830

复制
相关文章

相似问题

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