跑tensorflow代码的时候遇到报错:
NotImplementedError: Cannot convert a symbolic Tensor (ExpandDims:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported
原代码:
from sklearn.metrics import r2_score
...
model.compile(optimizer='adam', loss='mse', metrics=r2_score)
model.fit(X_train, Y_train, epochs=50, batch_size=20, validation_data=(X_val,Y_val), verbose=1)
控制台在运行到model.fit
的时候报错了,其实问题出在model.compile
上:sklearn.metrics里的r2_score不能作为metrics的值。
解决方法是要么自定义一个R2函数给metrics,要么改用keras.metrics里的函数。
自定义R2函数:
from keras import backend as K
def coeff_determination(y_true, y_pred):
SS_res = K.sum(K.square(y_true - y_pred))
SS_tot = K.sum(K.square(y_true - K.mean(y_true)))
return 1 - SS_res / (SS_tot + K.epsilon())
model.compile(optimizer='adam', loss='mse', metrics=[coeff_determination])
改用keras.metrics里的RMSE:
from keras import metrics
...
model.compile(optimizer='adam', loss='mse', metrics=metrics.RootMeanSquaredError())