Python сбой, когда я запускаю программу с настраиваемой функцией потерь - PullRequest
1 голос
/ 26 мая 2020

Каждый раз, когда я запускаю этот код, Python перестает работать. Чтобы убедиться, что это не проблема моей системы, я попытался запустить ее в Google Colab, но она тоже вышла из строя. Cra sh происходит, когда выполнение достигает model.fit line

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)

Я использую тензорный поток 1.15.0 при запуске этого кода. Есть идеи, что вызывает эту проблему?

1 Ответ

1 голос
/ 26 мая 2020

Ошибка в функции энергии, в которой вы вычисляете собственные значения и собственные векторы.

tf.linalg.eigh

Вычисляет собственные значения и собственные векторы самых внутренних матриц размером N на N в тензоре, так что тензор [. ..,:,:] * 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...