Приведенный ниже код выдает ошибку объект 'numpy.float64' не может быть вызван в last_mae = mae (val_scaled_price_client, cv_model) . Тем не менее, функция mae с теми же параметрами отлично работает вне цикла.
loss_history = [1000.00]
for i in range(10000):
# train
iterations = 10
train_auto_encoder(train_latent_customers=train_latentvars,
train_product_customers=train_scaled_price_client,
auto_encoder=auto_model,
iters=iterations,
batch_size=128,
display_step=20)
cv_model = auto_model.predict([val_latentvars, val_scaled_price_client_corrupted])
last_mae = mae(val_scaled_price_client, cv_model)
loss_history.append(last_mae)
if loss_history[-1] < loss_history[-2]:
iterations += 10
else:
break
Я объявил функцию mae в предыдущих ячейках следующим образом
# define function to calculate MAE between true and reconstructed values
def mae(y_true, y_pred):
# get non-zero positions
cond = np.not_equal(y_true, 0)
# get number of non-zero elements
num_non_zero = np.sum(cond)
# initialize zer matrix
zero_matrix = np.zeros(shape=y_true.shape)
# replace
predictions_corrected = np.where(cond, y_pred, zero_matrix)
# get rmse
mae = np.sum(np.abs(y_true - predictions_corrected)) / num_non_zero
# return
return(mae)
1 ответ
Проблема в вашей функции mae
. В предпоследней строке вы заменяете определение функции mae
числом. Если вы вызовете эту функцию один раз, все будет в порядке. Как только вы вызываете его снова (как в цикле), вы пытаетесь вызвать номер вместо функции, что невозможно.
Просто измени
mae = np.sum(np.abs(y_true - predictions_corrected)) / num_non_zero
# return
return(mae)
К
return np.sum(np.abs(y_true - predictions_corrected)) / num_non_zero
Python - это не Basic или Fortran, где вы назначаете результат имени функции, чтобы вернуть его :).
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.