我已经在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>
对,该如何初始化表?
答案 0 :(得分:0)
在调用signature_def_map
方法时添加add_meta_graph_and_variables()
参数。签名的输入和输出可以由tf.saved_model.utils.build_tensor_info(tensor)
约束,并且张量分别为indices
和values
。
获取并加载保存的模型后,照常使用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}]})