#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.
Хотя пример с игрушкой не воспроизводит ошибку, у кого-нибудь есть представление о том, что может быть источником этой ошибки?
Спасибо!