Tensorflow: inspeccionando cubos de hash para columnas categóricas y de características

Estoy ajustando el clasificador lineal para datos bastante anchos y dispersos usando el número de columnas categóricas con el cubo de hash y las columnas de características cruzadas como columnas de características.

Más adelante quiero usar los pesos / coeficientes del modelo en una infraestructura de servicio personalizada. Sé cómo extraer los pesos del modelo, pero obviamente, para las columnas mencionadas anteriormente, vienen para valores de característica ya troceados.

Puedo reconstruir un Hashtable (valor -> valor de hash) para columnas categóricas simples usando tf.string_to_hash_bucket_fast , pero tengo problemas para hacerlo con las Columnas de funciones cruzadas.

Para un par de valores de dos columnas categóricas que forman una columna cruzada , ¿cómo puedo entender en qué grupo se ubicarán?

Después de inspeccionar el código fuente, descubrí que la forma más sencilla sería construir una Capa de entrada para los datos de entrada que consisten en todos los valores distintos (o sus combinaciones) en la columna.

Como resultado, obtiene un DenseTensor que consta de 0 y 1, cada fila corresponde a un valor distinto y donde 1s están sentados en las columnas correspondientes al número real de hash bucket (he verificado que para Columnas categóricas, debería ser el mismo para Columnas cruzadas).

Aquí está el código de ejemplo (tanto para la columna categórica como para la columna cruzada ):

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))