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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值