Ошибка реализации взвешенного MAE: Используйте tf.autograph.experimental.set_loop_options для задания инвариантов формы?

#keras #loss-function

Вопрос:

Я хочу использовать настроенный MAE, взвешенный по Z-баллу y_true, для тренировки плотного NN с помощью Keras.

Игрушечный пример:

 import pandas as pd
import numpy as np
from keras.models import Sequential, Model

arr = np.random.rand(10,10)
df = pd.DataFrame(arr)
df = df.rename(columns = {0:'Label'})

X = np.array(df.iloc[:,1:10])
y = np.array(df["Label"])

y_mean = df["Label"].mean()
y_std = df["Label"].std()

def zscore(y_mean, y_std, value):
  return abs(( value - y_mean ) / y_std)

def customized_mae(y_true, y_pred):
  sum_error = 0.0
  for i in range(len(y_true)):
    z = zscore(y_mean, y_std, y_true[i])
    sum_error  = abs(y_pred[i] - y_true[i]) * z
  return sum_error / float(len(y_true))

for outer_step in range(1,2 1):

      model = Sequential()
      model.add(Dense(9, input_dim=9, activation='relu'))
      model.add(Dense(16, activation='relu'))
      model.add(Dense(1))

      model.compile(optimizer="Adamax", loss=customized_mae, metrics=['mae'])

      for inner_step in range(1,2 1):

            model.fit(X, y, epochs=150, batch_size=10)
 

Однако возникла ошибка, в которой говорилось

 ValueError: 'sum_error' has shape () before the loop, but shape (1,) after one iteration. Use tf.autograph.experimental.set_loop_options to set shape invariants.
 

Хотя пример с игрушкой не воспроизводит ошибку, у кого-нибудь есть представление о том, что может быть источником этой ошибки?

Спасибо!