Я пытаюсь реализовать модель повышения, используя Tensorflow "BoostedTreesRegressor".
Для этого мне нужно реализовать пользовательскую функцию потерь, при которой во время обучения потери будут рассчитываться в соответствии с logi c, определенным в моей пользовательской функции, а не с использованием обычного mean_squared_error.
В статьях я читал, что это можно реализовать с помощью интерфейса BoostedTreesEstimator, указав заголовок. Итак, я попытался реализовать мою модель следующим образом:
#define custom loss function to calculate smape
def custom_loss_fn(labels, logits):
return (np.abs(logits - labels) / (np.abs(logits) + np.abs(labels))) * 2
#create input functions
def make_input_fn(X, y, n_epochs=None, shuffle=True):
def input_fn():
dataset = tf.data.Dataset.from_tensor_slices((dict(X), y))
if shuffle:
dataset = dataset.shuffle(NUM_EXAMPLES)
dataset = dataset.repeat(n_epochs)
dataset = dataset.batch(NUM_EXAMPLES)
return dataset
return input_fn
train_input_fn = make_input_fn(dftrain, y_train)
eval_input_fn = make_input_fn(dfeval, y_eval, n_epochs=1, shuffle=False)
my_head = tf.estimator.RegressionHead(loss_fn=custom_loss_fn)
#Training a boosted trees model
est = tf.estimator.BoostedTreesEstimator(feature_columns,
head=my_head,
n_batches_per_layer=1,
n_trees=90,
max_depth=2)
est.train(train_input_fn, max_steps=100)
predictions = list(est.predict(eval_input_fn))
Этот код выдал ошибку следующим образом: «Подклассы Head должны реализовать create_estimator_spec()
или« NotImplementedError: Подклассы Head должны реализовывать create_estimator_spec()
или _create_tpu_estimator_spe c ().
Как я читал в статьях, create_estimator_spe c () используется, когда мы определяем model_fn () при создании нового Оценщика. Здесь я не хочу создавать какие-либо новые модели или оценщики, я только хочу использовать пользовательскую функцию потерь (вместо среднеквадратичной ошибки по умолчанию) при обучении, где модель обучения должна быть равна BoostedTreesRegressor / BoostingTreesEstimator.
Будет очень полезно, если кто-нибудь подскажет, как реализовать эту модель.