每當我運行這段代碼時,Python 都會停止工作。為了確保這不是我系統的問題,我嘗試在 Google Colab 中運行它,但它也崩潰了。當執行到達model.fit行時發生崩潰data = load_iris()X = data['data']y = data['target']X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.33, random_state =23)def energy(x): val,vec = tf.linalg.eigh(x) en = tf.reduce_sum(tf.math.square(val)) return endef energy_loss(y_actual,y_predicted): mtm_actual = tf.linalg.matmul(y_actual,tf.transpose(y_actual)) ptp_actual = tf.linalg.matmul(y_predicted,tf.transpose(y_predicted)) actual_energy = energy(y_actual) predicted_energy = energy(y_predicted) return tf.math.abs(actual_energy - predicted_energy)model = Sequential()model.add(Dense(32,input_dim=4))model.add(Dense(64,activation='relu'))model.add(Dense(128,activation='relu'))model.add(Dense(64,activation='relu'))model.add(Dense(3,activation='relu'))opt = Adam(lr = 1)model.compile(optimizer = opt, loss=energy_loss,metrics=['accuracy'])model.fit(X_train,X_train,epochs=25,verbose = 1,batch_size = 5)運行此代碼時,我使用的是 tensorflow 1.15.0。任何想法是什么導致了這個問題?
1 回答

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
錯誤出在計算特征值和特征向量的能量函數中。
tf.linalg.eigh
計算張量中最內層 N×N 矩陣的特征值和特征向量,滿足 tensor[...,:,:] * v[..., :,i] = e[..., i] * v [...,:,i],對于 i=0...N-1。
這是來自官方文檔。您對能量函數的輸入不滿足這些條件。
可以通過將正確的參數傳遞給energy函數來解決此問題
def energy_loss(y_actual,y_predicted):
mtm_actual = tf.linalg.matmul(y_actual,tf.transpose(y_actual))
ptp_actual = tf.linalg.matmul(y_predicted,tf.transpose(y_predicted))
actual_energy = energy(mtm_actual)
predicted_energy = energy(ptp_actual)
return tf.math.abs(actual_energy - predicted_energy)
添加回答
舉報
0/150
提交
取消