¿Cómo Tensorflow maneja las características categóricas con múltiples entradas dentro de una columna?

Por ejemplo, tengo un dato en el siguiente formato csv :

 csv col0 col1 col2 col3 1 AE|A|C 3 0 BD|F 2 2 C | 2 

Cada columna separada por comas representa una característica. Normalmente, una función es de un solo uso (por ejemplo col0, col1, col3 ), pero en este caso, la función para col2 tiene varias entradas (separadas por |).

¿Estoy seguro de que tensorflow puede manejar una función con un tensor escaso, pero no estoy seguro de si podría manejar funciones con múltiples entradas como col2 ?

¿Cómo se debe representar en el tensor escaso de Tensorflow?

Estoy usando el código de abajo (pero no sé el método de entrada de col2 )

 col0 = tf.feature_column.numeric_column('ID') col1 = tf.feature_column.categorical_column_with_hash_bucket('Title', hash_bucket_size=1000) col3 = tf.feature_column.numeric_column('Score') columns = [col0, col1, col3] tf.estimator.DNNClassifier( model_dir=None, feature_columns=columns, hidden_units=[10, 10], n_classes=4 ) 

Gracias por tu ayuda.

OK Parece que escribir una columna de características personalizadas funcionó para mí con la misma tarea.

Tomé HashedCategoricalColumn como base y limpié para trabajar solo con cuerdas. Debe agregar cheques para el tipo sin embargo.

 class _SparseArrayCategoricalColumn( _CategoricalColumn, collections.namedtuple('_SparseArrayCategoricalColumn', ['key', 'num_buckets', 'category_delimiter'])): @property def name(self): return self.key @property def _parse_example_spec(self): return {self.key: parsing_ops.VarLenFeature(dtypes.string)} def _transform_feature(self, inputs): input_tensor = inputs.get(self.key) flat_input = array_ops.reshape(input_tensor, (-1,)) input_tensor = tf.string_split(flat_input, self.category_delimiter) if not isinstance(input_tensor, sparse_tensor_lib.SparseTensor): raise ValueError('SparseColumn input must be a SparseTensor.') sparse_values = input_tensor.values # tf.summary.text(self.key, flat_input) sparse_id_values = string_ops.string_to_hash_bucket_fast( sparse_values, self.num_buckets, name='lookup') return sparse_tensor_lib.SparseTensor( input_tensor.indices, sparse_id_values, input_tensor.dense_shape) @property def _variable_shape(self): if not hasattr(self, '_shape'): self._shape = tensor_shape.vector(self.num_buckets) return self._shape @property def _num_buckets(self): """Returns number of buckets in this sparse feature.""" return self.num_buckets def _get_sparse_tensors(self, inputs, weight_collections=None, trainable=None): return _CategoricalColumn.IdWeightPair(inputs.get(self), None) def categorical_column_with_array_input(key, num_buckets, category_delimiter="|"): if (num_buckets is None) or (num_buckets < 1): raise ValueError('Invalid num_buckets {}.'.format(num_buckets)) return _SparseArrayCategoricalColumn(key, num_buckets, category_delimiter) 

Luego se puede envolver mediante una columna de inserción / indicador. Parece que es lo que necesitas. Fue el primer paso para mí. Necesito manejar la columna con valores como "str: float | str: float ...".