前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow 指标列,嵌入列

TensorFlow 指标列,嵌入列

作者头像
double
发布2018-07-25 18:01:16
1.4K0
发布2018-07-25 18:01:16
举报
文章被收录于专栏:算法channel

题图:feng-haha-483976-unsplash

一般地,机器学习、深度学习 feed 进来的数据要求为数值型。如果某列取值为字符型,需要做数值转换,今天就来总结下 TensorFlow 中的指标列和嵌入列。

指标列 ( indicator column ) 是指取值仅一个为 1,其他都为 0 的向量,它是稀疏的; 嵌入列 (embedding column) ,取值介于0和1之间,它是稠密的。

指标列,采取 one-hot 编码方法,有多少类输入就会得到一个多少维的向量。如果输入类别为 4 类,那么可以编码为如下,0,1,2,3 类分别编码为4维的向量。

TensorFlow 中通过调用 tf.feature_column.indicator_column 创建指标列

categorical_column = ... indicator_column = tf.feature_column.indicator_column(categorical_column)

但是,假设我们有一千万个可能的类别,或者可能有十亿个,而不是只有四个。出于多种原因,随着类别数量的增加,使用指标列来训练神经网络变得不可行。

如何解决类别数量激增导致的指标列不可行问题?

使用嵌入列来克服这一限制,嵌入列并非将数据表示为很多维度的独热矢量,而是将数据表示为低维度普通矢量,其中每个单元格可以包含任意数字,而不仅仅是 0 或 1。通过使每个单元格能够包含更丰富的数字,嵌入列包含的单元格数量远远少于指标列。

每个嵌入向量的维度是怎么确定的呢?嵌入矢量中的值如何神奇地得到分配呢?

1、设定词汇表单词个数为 1 万。如果选用指标列,则每个单词的取值为 1 万维,采取嵌入列,每个单词的维度仅为 10,这相比 one-hot 编码绝对是低维度了,维度取值一般经验公式是单词个数的4次方根。

2、初始时,将随机数字放入嵌入向量中,分配值在训练期间进行,嵌入矢量从训练数据中学习了类别之间的新关系。

TensorFlow 中通过调用 tf.feature_column.embedding_column 创建嵌入列,

categorical_column = ... embedding_column = tf.feature_column.embedding_column( categorical_column=categorical_column, dimension=dimension)

最后,以一个展示指标列和嵌入列的区别实例作为结尾,

来自:https://tensorflow.google.cn/get_started/feature_columns

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档