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

2024-04-26 07:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

每当我运行这段代码时,Python就会停止工作。为了确保这不是我的系统的问题,我试着在GoogleColab中运行它,它也崩溃了。当执行到达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 en

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(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。你知道是什么导致了这个问题吗


Tags: 代码testadddatamodeltftrainactivation
1条回答
网友
1楼 · 发布于 2024-04-26 07:32:35

误差在能量函数中,在能量函数中计算特征值和特征向量

tf.linalg.eigh

Computes the eigenvalues and eigenvectors of the innermost N-by-N matrices in tensor such that tensor[...,:,:] * v[..., :,i] = e[..., i] * v[...,:,i], for 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)

相关问题 更多 >