Денормализовать прогноз нейронной сети - PullRequest
1 голос
/ 04 ноября 2019

Я бы хотел денормализовать свой прогноз по нейронной сети. Сначала я нормализую свою основную истину и сохраняю ее стандартное и среднее значение в массиве numpy:

def norm(x):
  return ((x - x.mean()) / x.std())

norm_y_train_n = norm(y_train_n)
mean_y_train_n = y_train_n.mean
std_y_train_n = y_train_n.std

Затем я обучаю свою сеть:

history = model.fit(x_train_n, norm_y_train_n, batch_size=10, epochs=200, validation_split=0.1, shuffle=True, callbacks=[es])

Я хочу денормализовать свои данныев исходный дистрибутив, чтобы я мог интерпретировать rmse в диапазоне, который имеет смысл, следующим образом:

def rmse_denorm(y_true, y_pred):
    return backend.sqrt(backend.mean(backend.square((y_pred*std_y_train_n + mean_y_train_n) - (y_true*std_y_train_n+mean_y_train_n))))

, но я не могу, если я пытаюсь преобразовать значения numpy в тензорные значения с помощью tf.convert_to_tensor, напримерэто:

def rmse_denorm(y_true, y_pred):
return backend.sqrt(backend.mean(backend.square((y_pred*tf.convert_to_tensor(std_y_train_n) + tf.convert_to_tensor(mean_y_train_n)) - (y_true*tf.convert_to_tensor(std_y_train_n)+tf.convert_to_tensor(mean_y_train_n)))))

Я получу эту ошибку:

Failed to convert object of type <class 'builtin_function_or_method'> to Tensor. Contents: <built-in method std of numpy.ndarray object at 0x7ff00811aee0>. Consider casting elements to a supported type.

и если я хочу привести значения тензора:

 def rmse_denorm(y_true, y_pred):
return backend.sqrt(backend.mean(backend.square((tf.dtypes.cast(y_pred)*std_y_train_n + mean_y_train_n) - (tf.dtypes.cast(y_true)*std_y_train_n+mean_y_train_n))))

Я получу эту ошибку:

TypeError: cast() missing 1 required positional argument: 'dtype'

как мне это сделать?

1 Ответ

0 голосов
/ 07 ноября 2019

Попробуйте создать 2 tf.constant:

std_const = tf.constant(std_y_train_n)
mean_const = tf.constant(mean_y_train_n)
def rmse_denorm(y_true, y_pred):
    return backend.sqrt(backend.mean(backend.square((y_pred*std_const + mean_const) - (y_true*std_const+mean_const))))
...