查找HashTable键,在Tensorflow中加载SavedModel之后的值对

时间:2019-03-05 07:12:02

标签: tensorflow hashtable

我已经在Tensorflow中初始化了一个简单的HashTable,并使用 SavedModelBuilder

保存了模型
with tf.Session() as sess:

    file_name = tf.constant("vocab_target.txt", tf.string)

    id_to_vocab_init = tf.contrib.lookup.TextFileStringTableInitializer(
        file_name,
        key_column_index=1,
        value_column_index=0,
        vocab_size=None,
        delimiter='\t',
    )

    id_to_vocab_table = tf.contrib.lookup.HashTable(id_to_vocab_init, "UNK")

    indices = tf.constant([1, 2], tf.int64)
    values = id_to_vocab_table.lookup(indices)

    init_op = tf.group(tf.tables_initializer(), tf.global_variables_initializer())
    sess.run(init_op)

    print(values.eval())

    builder = tf.saved_model.builder.SavedModelBuilder('./export/')
    builder.add_meta_graph_and_variables(sess, ["serve"], legacy_init_op=init_op)
    builder.save()

保存之前,我可以使用id_to_vocab_table.lookup

轻松查找值

现在,在加载保存的模型之后,

with tf.Session(graph=tf.Graph()) as sess:
    tf.saved_model.loader.load(sess, ["serve"], './export/')

如何类似地查询/查找HashTable?

(说,加载SavedModel后如何访问该HashTable对象)

后续行动: 如果没有<key, value>对,该如何初始化表?

1 个答案:

答案 0 :(得分:0)

在调用signature_def_map方法时添加add_meta_graph_and_variables()参数。签名的输入和输出可以由tf.saved_model.utils.build_tensor_info(tensor)约束,并且张量分别为indicesvalues

获取并加载保存的模型后,照常使用sess.run()

indices_tensor = sess.graph.get_tensor_by_name(indices_tensor_name)
values_tensor = sess.graph.get_tensor_by_name(values_tensor_name)
sess.run([values_tensor],feed_dict={indices_tensor : [${real_data}]})