create_module_spec - 爆炸

create_module_spec - tfhub

我正在尝试创建一个 simple audio recognition to spot key words. Since my data set is small i am performing transfer learning. This is how the graph looks. Following this 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. 变量文件夹为空。不确定这是不是应该的样子?

  2. input_ten=tf.placeholder(tf.float32, shape = (1, 98, 40)) 这个对吗 ? 98X48 是图像大小,第一个元组通常代表批量大小。它应该保持为“1”还是未知的批量大小 'None' ?

  3. 将模块加载到脚本后

    高度,宽度=hub.get_expected_image_size('test_module')

    给我一个错误。

我试着依次回答你的问题

  1. 如果您构建模型的图形定义确实被冻结(即,所有变量都已被常量替换),则没有变量需要写入通常位于 variables/variables*。所以这对我来说是可以解释的。 -- 也就是说,Hub 模块将为您提供一种避免冻结图形定义的方法:在 module_fn 中调用原始图形构建代码,并在调用 Module.export() 之前在会话中恢复预先训练的变量。

  2. 对于您的模块类型,您可以制定规则。 ;-) 集线器模块可以容纳各种输入和输出形状,包括部分或完全未知的形状。像上面这样的输入占位符的形状必须与您插入的图形兼容。反过来,该图将使用与其正在进行的卷积一起工作的形状。 一般而言,将前导维度用于批量大小并保留未指定 (None) 通常很有用。

  3. hub.get_expected_image_size() 用于图像输入。我会在这里避免它。