create_module_spec - tfhub

问题描述 投票:0回答:1

我正在尝试创建一个simple audio recognition来发现关键词。由于我的数据集很小,我正在进行转学习。这是如何graph looks。在这个link之后,我创建了一个模块。这是代码

import tensorflow_hub as hub
import tensorflow as tf

# pylint: disable=unused-import
from tensorflow.contrib.framework.python.ops import audio_ops as contrib_audio
# pylint: enable=unused-import

def module_fn():
    input_name = "Reshape:0"
    output_name = "Reshape_2:0"
    graph_def = tf.GraphDef()
    with open('my_frozen_graph.pb', "rb") as f:
        graph_def.ParseFromString(f.read())

    input_ten=tf.placeholder(tf.float32, shape = (1, 98, 40))
    output_ten,=tf.import_graph_def(graph_def, input_map = {input_name: input_ten}, return_elements = [output_name])
    hub.add_signature(inputs = input_ten, outputs = output_ten)


spec = hub.create_module_spec(module_fn)
module = hub.Module(spec)
with tf.Session() as session:
    module.export('test_module',session)

虽然它确实执行并创建了一个'test_module'文件夹。

test_module
    |--> assets
    |--> variables
    |--> saved_model.pb
    |--> tfhub_module.pb

我怎么也没有问题

  1. variables文件夹为空。不确定这是不是应该是这样的?
  2. input_ten=tf.placeholder(tf.float32, shape = (1, 98, 40))这是对的吗? 98X48是图像大小,第一个元组通常表示批量大小。是保留为“1”还是未知批量“无”?
  3. 将模块加载到脚本后 height,width = hub.get_expected_image_size('test_module') 给我一个错误。
python tensorflow tensorflow-hub
1个回答
1
投票

让我试着依次回答你的问题。

  1. 如果构建模型的图形确实是冻结的(即,所有变量都已被常量替换),则没有变量需要写入通常位于变量/变量*的检查点。所以这看起来对我来说是可以理解的。 - 也就是说,Hub模块会为您提供一种避免冻结图形defs的方法:调用module_fn中的原始图形构建代码,并在调用Module.export()之前恢复会话中预先训练的变量。
  2. 对于您的模块类型,您可以制定规则。 ;-) Hub Modules可以容纳各种输入和输出形状,包括部分或完全未知的形状。像上面这样的输入占位符必须具有与您插入的图形兼容的形状。反过来,该图形将使用与其正在进行的卷积一起工作的形状。一般来说,使用批量大小的前导维度并保留未指定的(None)通常很有用。
  3. hub.get_expected_image_size()用于图像输入。我会在这里避免它。
© www.soinside.com 2019 - 2024. All rights reserved.