Keras回归模型训练时出现'numpy.float64 object is not callable'错误求助
问题原因与解决方法
问题原因
你代码里犯了变量名与函数名重名的错误。第一次循环执行mean_squared_error = mean_squared_error(y_test,y_pred)时,原本作为函数的mean_squared_error被赋值成了计算出的MSE数值(numpy.float64类型)。第二次循环再调用mean_squared_error(y_test,y_pred)时,这个名字已经指向一个浮点数而非函数,因此抛出“不可调用”的类型错误。
解决方法
方法一:修改变量名(最简单直接)
把存储MSE结果的变量名改成和函数名不重复的名称,比如current_mse:
epochs_number = 50 mean_squared_errors = [] number_of_reapeat = 50 for i in range(0, number_of_reapeat): print(i) X_train, X_test, y_train, y_test = train_test_split(predictors, target, test_size=0.3, random_state=i) model.fit(X_train, y_train, epochs=epochs_number, verbose=0) y_pred = model.predict(X_test) current_mse = mean_squared_error(y_test, y_pred) mean_squared_errors.append(current_mse)
方法二:导入函数时使用别名
如果是从sklearn.metrics或其他库导入的mean_squared_error函数,可以给函数起一个别名,从根源避免命名冲突:
# 导入时指定别名 from sklearn.metrics import mean_squared_error as calculate_mse epochs_number = 50 mean_squared_errors = [] number_of_reapeat = 50 for i in range(0, number_of_reapeat): print(i) X_train, X_test, y_train, y_test = train_test_split(predictors, target, test_size=0.3, random_state=i) model.fit(X_train, y_train, epochs=epochs_number, verbose=0) y_pred = model.predict(X_test) mean_squared_error = calculate_mse(y_test, y_pred) mean_squared_errors.append(mean_squared_error)
内容的提问来源于stack exchange,提问作者Ahmad Badpey
相关产品推荐
相关产品推荐

