栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

TensorFlow:Allocation of 256000000 exceeds 10% of system memory对auc的影响

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

TensorFlow:Allocation of 256000000 exceeds 10% of system memory对auc的影响

1.背景:

我在原来特征基础上,增加了一列特征,这列特征是一个list,长度不固定[0,5]之间的一个长度,比如 样本 1: ['找工作', '发工资', '领导力']

代码中给该列特征先做了一个分桶,根据该列特征中词的个数,来确定桶的大小;我这里大约2k个不同的词,hash_bucket_size=2e3;然后做tf.feature_column.embedding_column(feat, 8);这个8怎么确定?2000开两次根号,等于6.7,向上取整得到 7,因为这样不会造成词重叠,但是会造成一些参数浪费;至于效果如何,数据记录在下面;为什么是 8? 因为我没有见过embedding的长度是单数,因此我取了8. 下面将embedding设置为[6, 7, 8]都跑了一遍,整体对比一下auc情况。

feat = tf.feature_column.categorical_column_with_hash_bucket(key='feature', hash_bucket_size=2e3)
feat_em = tf.feature_column.embedding_column(feat, 8)
2.解决:

方法一:将batchsize调小一些

方法二:过滤掉error或者warning信息「看着有点这是自欺欺人,看不到就当不存在」

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 
import tensorflow as tf

0 = all messages are logged (default behavior)
1 = INFO messages are not printed
2 = INFO and WARNING messages are not printed
3 = INFO, WARNING, and ERROR messages are not printed
3.不同embedding长度的eval auc:

embedding长度=6:  eval auc = 0.81333274

embedding长度=7:  eval auc0.81431544

embedding长度=8:  eval auc 0.8145471

embedding长度=16:  eval auc 0.81362206

看着差别不是特别大,从auc的 细微差别上能 看出 ,embedding维度太大或者小了 ,auc都不行;那就尽量让embedding维度的值为:

并且维度是单数还是双数,这个目测对auc没有什么影响,所以不用纠结单双数了(今天的最大收获) 

但是训练时间上维度越小 ,时间越短。

4.产生的原因以及带来的影响

产生的原因:

模型参数较多,能自由分配的RAM不能够满足所需内存。情况 一:在运行tf.global_variables_initializer()的时候就会出现。情况二:如果选择的优化器需要历史grad的话,也会报这个错误,因为存储历史grad,需要double的RAM。情况三:数据类型float32 和 float 64占用内存是不同的,因此慎重选择数据类型。

带来的影响:

选择了一台RAM足够的机器运行了一下demo,auc变为了0.852,提升了3个点。

参考:
1.python - Tensorflow Allocation Memory: Allocation of 38535168 exceeds 10% of system memory - Stack Overflow

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958684.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号