一种热编码巨大的3D阵列

时间:2018-11-13 15:19:59

标签: python tensorflow one-hot-encoding

作为标题,我的数据如下所示: ["test", "bob", "romeo"]-等只是随机单词 我已经根据单词中每个字母的字母位置将它们转换为数字,所以现在是:

[[19, 4, 18, 19], [1, 14, 1], [17, 14, 12, 4, 14]]

现在我想对其进行热编码

tf.one_hot(featuresVectors, longestWordLen)

结果

ResourceExhaustedError: OOM when allocating tensor with shape[512996,62,62]

2 个答案:

答案 0 :(得分:2)

您基本上用完了内存。两种可能有用的方法是使用较少的功能(例如,对单词进行计数,仅保留前10000个左右,其余保留一个“未知的脚尖”)以减小onehot的大小。或者,您可以在网络中使用嵌入层,然后直接输入整数。

答案 1 :(得分:2)

您的内存不足,这意味着设备上没有足够的内存来创建这样的张量。假设您的批量大小为512996,深度尺寸为62,则您尝试创建张量为512996x62x62xsizeof(float): ~7.34Go !

因为索引永远不会大于26。您可以尝试为该张量使用较小的数据类型,例如int8tf.one_hot(featuresVectors, longestWordLen, dtype=tf.int8)。 那应该在您的设备上花费512996x62x62x1: ~1.83 Go

如果您的设备仍无法分配张量,则必须减小批大小。 (又称字数)