【问题标题】:Pytorch equivalent of tensorflow keras StringLookup?Pytorch相当于tensorflow keras StringLookup?
【发布时间】:2021-12-04 22:20:05
【问题描述】:

我现在正在使用 pytorch,但我缺少一个层:tf.keras.layers.StringLookup,它有助于处理 id。有什么解决方法可以用 pytorch 做类似的事情吗?

我正在寻找的功能示例:

vocab = ["a", "b", "c", "d"]
data = tf.constant([["a", "c", "d"], ["d", "a", "b"]])
layer = tf.keras.layers.StringLookup(vocabulary=vocab)
layer(data)

Outputs:
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[1, 3, 4],
       [4, 1, 2]])>

【问题讨论】:

    标签: python tensorflow keras pytorch


    【解决方案1】:

    包torchnlp,

    pip install pytorch-nlp
    
    from torchnlp.encoders import LabelEncoder
    
    data = ["a", "c", "d", "e", "d"]
    encoder = LabelEncoder(data, reserved_labels=['unknown'], unknown_index=0)
    
    enl = encoder.batch_encode(data)
    
    print(enl)
    
    tensor([1, 2, 3, 4, 3])
    

    【讨论】:

    • 该解决方案是否支持发送 pytorch 张量和接收 pytorch 张量? (类似于tf)在python列表级别做操作会bottnet gpu执行代码
    • 不确定是否要避免将列表作为输入。如您所知,字符串列表没有直接转换为 pytorch 张量。
    • 我用 batch_encode 编辑了您的评论以更好地适应这种情况,谢谢!
    【解决方案2】:

    您可以使用Collections.Countertorchtextvocab 对象从您的词汇表中构造一个查找函数。然后,您可以轻松地将序列传递给它并将它们的编码作为张量:

    from torchtext.vocab import vocab
    from collections import Counter
    
    tokens = ["a", "b", "c", "d"]
    samples = [["a", "c", "d"], ["d", "a", "b"]]
    
    # Build string lookup
    lookup = vocab(Counter(tokens))
    
    >>> torch.tensor([lookup(s) for s in samples])
    tensor([[0, 2, 3],
            [3, 0, 1]])
    

    【讨论】:

      【解决方案3】:

      你可以使用torchtext库, 只需使用 python3 -m pip install torchtext 安装它

      你可以是这样的:

      from torchtext.vocab import vocab
      from collections import OrderedDict
      
      tokens = ['a', 'b', 'c', 'd']
      v1 = vocab(OrderedDict([(token, 1) for token in tokens]))
      v1.lookup_indices(["a","b","c"])
      

      结果如下:

      ([0, 1, 2],)
      

      【讨论】:

      • 该解决方案是否支持发送 pytorch 张量和接收 pytorch 张量? (类似于tf)在python列表级别做操作会bottnet gpu执行代码
      • 是的,但它应该是一维张量,因此您将对 xode 进行一些操作
      猜你喜欢
      • 1970-01-01
      • 2019-09-18
      • 2020-05-05
      • 2019-12-21
      • 2018-06-21
      • 1970-01-01
      • 2019-05-23
      • 2019-11-27
      • 2021-12-19
      相关资源
      最近更新 更多