tensorflow报错解决:NotImplementedError: Cannot convert a symbolic Tensor (ExpandDims:0) to a numpy array.

跑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函数:

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())

 

posted @ 2023-09-25 19:02  明日未来  阅读(402)  评论(0)    收藏  举报