Python 深度神经网络内存不足
我用Tensorflow编写了一个模型,我的电脑内存用完了,然后我在Google Colab上尝试了同样的方法,得到了同样的结果 我的数据集形状最初是这样的:Python 深度神经网络内存不足,python,tensorflow,memory,dataset,data-science,Python,Tensorflow,Memory,Dataset,Data Science,我用Tensorflow编写了一个模型,我的电脑内存用完了,然后我在Google Colab上尝试了同样的方法,得到了同样的结果 我的数据集形状最初是这样的: (541909, 8) 问题是我的数据集有一行名为'Description',看起来是这样的: 0 WHITE HANGING HEART T-LIGHT HOLDER 1 WHITE METAL LANTERN 2 CREAM CUPID HEARTS COAT HANGE
(541909, 8)
问题是我的数据集有一行名为'Description'
,看起来是这样的:
0 WHITE HANGING HEART T-LIGHT HOLDER
1 WHITE METAL LANTERN
2 CREAM CUPID HEARTS COAT HANGER
3 KNITTED UNION FLAG HOT WATER BOTTLE
4 RED WOOLLY HOTTIE WHITE HEART
...
我的数据集有超过500000行,而'Description'
列有超过3500个唯一值,因此,为了训练我的模型,我使用了pandas.get_dummies()
函数:
dataset = pd.get_dummies(dataset, columns=["Description"])
使用此选项,数据集形状将更改为:
(541909, 3936)
我确信如此庞大的数据量是问题的一部分,但我不确定如何避免它,对如何解决这个问题有什么建议吗?是的,有一个解决方案。您应该加载数据并使用
tf.data.Dataset
对其进行转换
因为很少有评论说您将不得不缩短Description
列,可以说有一个阈值。但是使用数据集
管道,您将确保它不会将完整的数据集加载到内存中,而是一次只加载一个批处理
Tensorflow还建议将此API用于输入管道。这将是一个学习曲线,使用它而不是
pandas
。但我会建议您这样做以获得更好的性能。有很多教程。我建议遵循一个教程,将数据集直接加载到tf.data.dataset
是的,有一个解决方案。您应该加载数据并使用tf.data.Dataset
对其进行转换
因为很少有评论说您将不得不缩短Description
列,可以说有一个阈值。但是使用数据集
管道,您将确保它不会将完整的数据集加载到内存中,而是一次只加载一个批处理
Tensorflow还建议将此API用于输入管道。这将是一个学习曲线,使用它而不是
pandas
。但我会建议您这样做以获得更好的性能。有很多教程。我建议遵循一个教程,将数据集直接加载到tf.data.dataset
中。这个描述
列似乎在描述产品,对吗?是否有可能对产品进行分类?这将给您留下一个维度小得多的分类列。此外,如果此列的多样性如此之高,很可能对模型的学习没有多大帮助。您甚至可以考虑完全删除列,如果不可行的话,将其合并为更可用的。information@TimStack,Description列大约有4000个值,所以尝试对它们进行分组会很烦人。我也考虑将其删除。但我不这么认为,因为我认为销售数量与销售的产品有很大的关系,顺便说一句,我会放弃它,看看结果。你可以尝试基于文本的类别预测,以避免将所有4000个值分组。这仍然需要您手动对一些产品进行分类,但它可能会给您提供足够好的结果,以避免对所有产品进行分类。此Description
列似乎在描述产品,对吗?是否有可能对产品进行分类?这将给您留下一个维度小得多的分类列。此外,如果此列的多样性如此之高,很可能对模型的学习没有多大帮助。您甚至可以考虑完全删除列,如果不可行的话,将其合并为更可用的。information@TimStack,Description列大约有4000个值,所以尝试对它们进行分组会很烦人。我也考虑将其删除。但我不这么认为,因为我认为销售数量与销售的产品有很大的关系,顺便说一句,我会放弃它,看看结果。你可以尝试基于文本的类别预测,以避免将所有4000个值分组。这仍然需要您手动对相当多的4k进行分类,但它可能会为您提供足够好的结果,以避免对所有4k进行分类