【问题标题】:Standard implementation of vectorize_sequencesvectorize_sequences 的标准实现
【发布时间】:2021-09-26 01:11:39
【问题描述】:

François CholletDeep Learning with Python中,出现了这个函数:

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results

我了解这个函数的作用。在this quesionthis question 中也询问了此功能,还提到了herehereherehereherehere。尽管传播如此广泛,但根据 Chollet 的书,这种矢量化是“手动完成的,以获得最大的清晰度”。我对是否有标准而不是“手动”的方式感兴趣。

是否有标准的 Keras / Tensorflow / Scikit-learn / Pandas / Numpy 实现的函数与上述函数的行为非常相似?

【问题讨论】:

    标签: pandas numpy tensorflow keras scikit-learn


    【解决方案1】:

    解决方案MultiLabelBinarizer

    假设sequences 是一个整数数组,其最大可能值为dimension-1,我们可以使用sklearn.preprocessing 中的MultiLabelBinarizer 来复制函数vectorize_sequences 的行为

    from sklearn.preprocessing import MultiLabelBinarizer
    
    mlb = MultiLabelBinarizer(classes=range(dimension))
    mlb.fit_transform(sequences)
    

    使用 Numpy 广播的解决方案

    假设sequences 是一个整数数组,最大可能值为dimension-1

    (np.array(sequences)[:, :, None] == range(dimension)).any(1).view('i1')
    

    解决的例子

    >>> sequences
    [[4, 1, 0], 
     [4, 0, 3],
     [3, 4, 2]]
    
    >>> dimension = 10
    >>> mlb = MultiLabelBinarizer(classes=range(dimension))
    >>> mlb.fit_transform(sequences)
    
    array([[1, 1, 0, 0, 1, 0, 0, 0, 0, 0],
           [1, 0, 0, 1, 1, 0, 0, 0, 0, 0],
           [0, 0, 1, 1, 1, 0, 0, 0, 0, 0]])
    
    
    >>> (np.array(sequences)[:, :, None] == range(dimension)).any(1).view('i1')
    
    array([[0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
           [1, 0, 1, 0, 1, 0, 0, 0, 0, 0],
           [1, 1, 0, 0, 1, 0, 0, 0, 0, 0]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2018-04-28
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多