не знаю, что это было ... Но теперь все работает.
Сначала я пытался не использовать созданные мной пустые столбцы OneHodEncode, но вводил начальный кадр данных "train_dummy_features" с категориальными столбцами:
# split columns and indexes of categorical and continues columns
categorical_columns = list(train_dummy_features.select_dtypes(include=['category','object']))
print(categorical_columns)
numeric_columns = list(train_dummy_features.select_dtypes(include=['int','uint8']))
print(numeric_columns)
cat_features_indexes = [train_dummy_features.columns.get_loc(c) for c in train_dummy_features.columns if c in categorical_columns]
print(cat_features_indexes)
continues_features_indexes = [train_dummy_features.columns.get_loc(c) for c in train_dummy_features.columns if c not in categorical_columns]
print(continues_features_indexes)
А затем создал список feature_columns с использованием функций TensorFlow:
numeric_features = [tf.feature_column.numeric_column(key = column) for column in numeric_columns]
print(numeric_features)
categorical_features = [
tf.feature_column.embedding_column(
categorical_column = tf.feature_column.categorical_column_with_vocabulary_list
(key = column
, vocabulary_list = train_dummy_features[column].unique()
),
dimension = len(train_dummy_features[column].unique())
)
for column in categorical_columns
]
print(categorical_features[3])
feature_columns = numeric_features + categorical_features
feature_columns[2]
и поместите начальный кадр данных "train_dummy_features" с категориальными столбцами в X_train:
X = train_dummy_features
y = train_measure # since we already have dataframe with the measure
X_train, y_train = X, y
Объявлены "классификатор" и "train_input_fn", как указано в исходном посте, обученный классификатор.
После этого оба
def serving_input_receiver_fn():
#feature_spec = {INPUT_TENSOR_NAME: tf.FixedLenFeature(dtype=tf.float32, shape=[452])}
feature_spec = tf.feature_column.make_parse_example_spec(feature_columns)
return tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)()
classifier.export_savedmodel(export_dir_base="export_model2/", serving_input_receiver_fn=serving_input_receiver_fn)
и
def serving_input_receiver_fn():
serialized_tf_example = tf.placeholder(dtype=tf.string, shape=[None], name='input_tensors')
receiver_tensors = {"predictor_inputs": serialized_tf_example}
feature_spec = tf.feature_column.make_parse_example_spec(feature_columns) #{"words": tf.FixedLenFeature([len(feature_columns)],tf.float32)}
features = tf.parse_example(serialized_tf_example, feature_spec)
return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)
classifier.export_savedmodel(export_dir_base="export_model3/", serving_input_receiver_fn=serving_input_receiver_fn)
успешно экспортировал модель.
Я попытался повторить первую версию шагов, которая вызвала ошибку вчера, но не могу повторить ошибку сейчас.
Итак, описанные шаги успешно обучаются и экспортируются tf.estimator.DNNClassifier model