在弗朗索瓦·乔莱的https://www.manning.com/books/deep-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我明白这个功能是干什么的。这个函数在这个怪胎和这个问题中都有查询,还提到了这里、这里、这里、这里、这里和这里。尽管范围如此之广,但根据Chollet的书,这种矢量化是“手动完成的,以达到最大的清晰度”。我感兴趣的是是否有一个标准,而不是“手册”的做法。
是否有一个标准的Keras / Tensorflow / Scikit-learn / Pandas / Numpy实现的函数,其行为与上面的函数非常相似?
发布于 2021-07-17 17:27:03
使用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]])https://stackoverflow.com/questions/68422410
复制相似问题