为了账号安全,请及时绑定邮箱和手机立即绑定

当我使用自定义损失函数运行程序时 Python 崩溃

当我使用自定义损失函数运行程序时 Python 崩溃

精慕HU 2022-12-06 15:24:56
每当我运行这段代码时,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)


查看完整回答
反对 回复 2022-12-06
  • 1 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号