`indicator_column` encodes the input to a `multi-hot` representation, not `one-hot` encoding. The example from https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column clarifies more: name = indicator_column(categorical_column_with_vocabulary_list( 'name', ['bob', 'george', 'wanda']) columns = [name, ...] features = tf.parse_example(..., features=make_parse_example_spec(columns)) dense_tensor = input_layer(features, columns) dense_tensor == [[1, 0, 0]] # If "name" bytes_list is ["bob"] dense_tensor == [[1, 0, 1]] # If "name" bytes_list is ["bob", "wanda"] dense_tensor == [[2, 0, 0]] # If "name" bytes_list is ["bob", "bob"] The last two examples describe what is meant by `multi-hot` encoding. for example if the input be `["bob", "wanda"]` the encoding will be `[[1, 0, 1]]`.