Python 在损失函数中将浮点张量转换为整数张量
我正在构建一个损失函数,我需要使用y_真和y_pred作为矩阵的索引,我用它来计算损失。问题是,这两个函数都是浮点张量,像cast()和round()这样的函数是不可微的,所以我不能在loss函数中使用它们Python 在损失函数中将浮点张量转换为整数张量,python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我正在构建一个损失函数,我需要使用y_真和y_pred作为矩阵的索引,我用它来计算损失。问题是,这两个函数都是浮点张量,像cast()和round()这样的函数是不可微的,所以我不能在loss函数中使用它们 import numpy as np import tensorflow as tf from keras.models import Sequential from keras.layers import Dense from keras.optimizers import Adam fr
import numpy as np
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
from sklearn.utils import shuffle
from keras.utils import to_categorical
K = tf.keras.backend
A = np.random.randint(12, size=(12,12))
def score_loss(y_true, y_pred):
y_pred = tf.nn.softmax(y_pred)
y_true = tf.nn.softmax(y_true)
y_pred = K.cast(y_pred,"int32")
y_true = K.cast(y_true,"int32")
loss = -K.sum(tf.gather_nd(A, tf.stack((y_true, y_pred), axis=-1)))
return loss
data = np.random.rand(1000,10)
data_y = np.array(range(0,10))
X = data[:, 0:8]
y = data[:, 9]
for i in range(0, len(y)):
y[i] = data_y[i%9]
y = shuffle(y)
y = to_categorical(y, 9)
model = Sequential()
model.add(Dense(200, input_shape = (8,), activation = "relu"))
model.add(Dense(9, activation = "softmax"))
model.compile(loss = score_loss, optimizer= Adam())
培训期间出现以下错误:
ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.
我需要另一种方法将其转换为整数,或者另一种方法来完成整件事。在代码中的哪一行出现错误?在调用损失函数的训练过程中。您能在损失函数之外进行转换吗?如果您的模型正在生成索引,那么不管怎样,将它们设置为
int
s可能更有意义。在代码中的哪一行出现错误?在调用损失函数的训练期间。您可以在损失函数之外进行转换吗?如果您的模型正在生成索引,那么将它们设置为int
s可能更有意义。