Оцените и сохраните модель линейного комбинированного классификатора DNN в TensorflowPython

Программы на Python
Ответить
Anonymous
 Оцените и сохраните модель линейного комбинированного классификатора DNN в Tensorflow

Сообщение Anonymous »

Я использую оценщик тензорного потока для своей модели, и он работает для обучения и оценки (фрагмент кода приведен ниже). Хотя точность результатов составляет 93%, точность и полнота равны 0, что невозможно. Это относится как к результатам обучения, так и к результатам тестов.
Я хочу получить прогнозы из модели и самостоятельно рассчитать показатели производительности. Помимо этого, я также хочу сохранить обученную модель (мне подходит любой формат). Ниже приведена небольшая часть кода, который я использую. labeled_features — это основной набор данных, используемый для модели, а train_spec и eval_spec — это всего лишь части основного набора данных.
Предположим, что переменные такие как скрытые_юниты и dropout_rate, имеют значения, соответствующие модели/набору данных, которые работают нормально, поскольку сообщение было бы слишком большим, если бы был приведен пример кода для каждой переменной.

Код: Выделить всё

import tensorflow as tf

wide_columns = []

wide_columns += [tf.feature_column.categorical_column_with_hash_bucket(
key = 'user_id', hash_bucket_size = 1000, dtype = tf.dtypes.int64)]

wide_columns += [tf.feature_column.categorical_column_with_hash_bucket(
key = 'product_id', hash_bucket_size = 100, dtype = tf.dtypes.int64)]

wide_columns += [tf.feature_column.crossed_column(
['user_id', 'product_id'], hash_bucket_size = 1000)]

deep_columns = []

cat_keys = {}
for col in cat_features:
cat_keys[col] = (labeled_features.selectExpr('{0} as key'.format(col)).distinct().orderBy('key')
.groupBy().agg(f.collect_list('key').alias('keys')).collect()[0]['keys'])

# categorical features
for col in cat_features:
if col not in ['user_id', 'product_id']:
col_def = tf.feature_column.categorical_column_with_identity(
key=col, num_buckets=np.max(cat_keys[col]) + 1)
deep_columns += [tf.feature_column.embedding_column(
col_def, dimension=int(np.max(cat_keys[col]) ** 0.25))]

# continuous features
for col in num_features:
deep_columns += [tf.feature_column.numeric_column(col)]

model = tf.estimator.DNNLinearCombinedClassifier(
linear_feature_columns = wide_columns,
linear_optimizer = tf.keras.optimizers.legacy.Ftrl(),
dnn_feature_columns = deep_columns,
dnn_hidden_units = hidden_units,
dnn_dropout = dropout_rate,
dnn_optimizer = tf.keras.optimizers.legacy.Adagrad()
)

train_results = tf.estimator.train_and_evaluate(model, train_spec, eval_spec)

batch_size = 128
steps = int(test.count() / batch_size)
test_results = model.evaluate(test_spec, steps = steps)
Чтобы получить прогнозы от модели, я попробовал следующий код, который продолжает выполняться бесконечно, пока я сам не остановлю выполнение.

Код: Выделить всё

predictions = model.predict(get_input_fn(test))
predictions_df = spark.createDataFrame(predictions)
Для сохранения модели я попробовал несколько синтаксисов, ни один из которых не сработал. Ниже приведены две попытки (которые, как я заметил, используются чаще всего), которые я сделал, и соответствующая ошибка, которую я получил.
Попытка 1:

Код: Выделить всё

model_path = "path/to/model"

feature_columns = wide_columns + deep_columns
serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
tf.feature_column.make_parse_example_spec(feature_columns))

export_path = model.export_saved_model(model_path, serving_input_fn)
ValueError: Feature_columns содержат разные parse_spec для ключа user_id. Учитывая VarLenFeature(dtype=tf.string) и VarLenFeature(dtype=tf.int64)

Попытка 2:

Код: Выделить всё

model_path = "path/to/model"
checkpoint = tf.train.Checkpoint(model = model)
checkpoint.save(model_path)
tf.saved_model.save(model, model_path)
ValueError: Checkpoint ожидал, что модель будет отслеживаемым объектом (объект, производный от Trackable), получил . Если вы считаете, что этот объект можно отслеживать (т. е. он является частью API TensorFlow Python и управляет состоянием), откройте проблему.


Подробнее здесь: https://stackoverflow.com/questions/793 ... tensorflow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»