【问题标题】:Tensorflow: Inspecting Hash buckets for Categorical and Feature ColumnsTensorflow:检查分类和特征列的哈希桶
【发布时间】:2017-11-17 23:49:51
【问题描述】:

我正在使用 带有散列桶的分类列Crossed Feature Columns 作为特征列的数量为相当宽和稀疏的数据拟合线性分类器。

稍后我想在自定义服务基础架构中使用模型的权重/系数。我知道如何从模型中提取权重,但显然,对于上述列,它们来自已经散列的特征值。

我可以使用 tf.string_to_hash_bucket_fast 为简单的分类列重建一个哈希表(值 -> 哈希值),但是对于交叉特征列我会遇到麻烦。

对于构建交叉列的两个分类列的一对值 - 我如何了解它们将进入哪个存储桶?

【问题讨论】:

  • 更改问题的标题

标签: python tensorflow


【解决方案1】:

检查源代码后,我发现最简单的方法是为输入数据构建一个输入层,该输入数据由列中的所有不同值(或其组合)组成。 p>

结果你得到一个由 0 和 1 组成的 DenseTensor,每一行对应一个不同的值,其中 1 位于与实际哈希桶编号相对应的列中(我已经验证,对于分类列,应该是CrossedColumns 也是如此)。

这是示例代码(分类列交叉列):

import tensorflow as tf
from tensorflow.python.feature_column import feature_column as fc

actual_sex = {'sex': tf.Variable(['male', 'female', 'female', 'male'], tf.string)}
actual_nationality = {'nationality': tf.Variable(['belgian', 'french', 'belgian', 'belgian'], tf.string)}
actual_sex_nationality = dict(actual_sex, **actual_nationality)

# hashed_column
sex_hashed_raw = fc.categorical_column_with_hash_bucket("sex", 10)
sex_hashed = fc.indicator_column(sex_hashed_raw)

# crossed column
crossed_sn_raw = fc.crossed_column(['sex', 'nationality'], hash_bucket_size = 20)
crossed_sn = fc.indicator_column(crossed_sn_raw)

layer_s = tf.feature_column.input_layer(actual_sex_nationality, sex_hashed)
layer_sn = tf.feature_column.input_layer(actual_sex_nationality, crossed_sn)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(layer_s))
print(sess.run(layer_sn))

【讨论】:

  • 由于您想在自定义基础架构中使用系数,我相信您需要将分类值映射到 hashbucket 和系数并重建逻辑回归模型?你最后是怎么做到的?在 json 文件中?
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2017-08-15
  • 2015-11-11
  • 2018-01-18
  • 2014-04-08
相关资源
最近更新 更多