我更喜欢使用一个hot而不是embedding_lookup。
import tensorflow as tf vocabulary = "UDLR" original_string = "UDLRUDLR" mapping_characters = tf.string_split([vocabulary], delimiter="") input_characters = tf.string_split([original_string], delimiter="") table = tf.contrib.lookup.index_table_from_tensor( mapping=mapping_characters.values, default_value=0) encoded = tf.one_hot(table.lookup(input_characters.values), len(vocabulary), dtype=tf.int8) tf.InteractiveSession().as_default() tf.tables_initializer().run() print(encoded.eval())
结果:
[[1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]]
如果您可以将字符串从“UDRL”转换为“3210”。 您可以使用tf.nn.embeddings_lookup执行此操作,如下所示:
embeddings = tf.constant([[1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1]]) labels = [0,3,1,2] encode_tensors = tf.nn.embedding_lookup(embeddings,labels)
sess.run(encode_tensors)的输出:
array([[1, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0]], dtype=int32)
希望这可以帮助 !