Используя Tensorflow 1.8.0, мы сталкиваемся с проблемой всякий раз, когда пытаемся построить категориальный столбец.Вот полный пример, демонстрирующий проблему.Он работает как есть (используя только числовые столбцы).Раскомментирование определения столбца индикатора и данных генерирует трассировку стека, заканчивающуюся tensorflow.python.framework.errors_impl.InternalError: Unable to get element as bytes.
import tensorflow as tf
import numpy as np
def feature_numeric(key):
return tf.feature_column.numeric_column(key=key, default_value=0)
def feature_indicator(key, vocabulary):
return tf.feature_column.indicator_column(
tf.feature_column.categorical_column_with_vocabulary_list(
key=key, vocabulary_list=vocabulary ))
labels = ['Label1','Label2','Label3']
model = tf.estimator.DNNClassifier(
feature_columns=[
feature_numeric("number"),
# feature_indicator("indicator", ["A","B","C"]),
],
hidden_units=[64, 16, 8],
model_dir='./models',
n_classes=len(labels),
label_vocabulary=labels)
def train(inputs, training):
model.train(
input_fn=tf.estimator.inputs.numpy_input_fn(
x=inputs,
y=training,
shuffle=True
), steps=1)
inputs = {
"number": np.array([1,2,3,4,5]),
# "indicator": np.array([
# ["A"],
# ["B"],
# ["C"],
# ["A", "A"],
# ["A", "B", "C"],
# ]),
}
training = np.array(['Label1','Label2','Label3','Label2','Label1'])
train(inputs, training)
. Попытки использовать тариф для встраивания не лучше.Используя только числовые входы, мы можем успешно масштабировать до тысяч входных узлов, и фактически мы временно расширили наши категориальные функции в препроцессоре для имитации индикаторов.
Документация для categorical_column_*()
и indicator_column()
заполненав ссылках на функции, которые мы почти уверены, что мы не используем (входные данные прото, что бы bytes_list
не было), но, возможно, мы ошибаемся в этом?