每当我运行这段代码时,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
提交
取消