tensorflow中的自定义损失问题

tensorflow中的自定义损失问题,tensorflow,keras,loss-function,Tensorflow,Keras,Loss Function,我尝试实现一个自定义的丢失函数。损失函数的目标是最小化: 损耗=最大值(y_实际值,y_预测值)/最小值(y_实际值,y_预测值) 整个脚本如下所示: def get_model(): model = Sequential() model.add(Dense(512, activation = 'relu', input_dim = len(X[0]))) model.add(Dense(512,input_dim = 200, activation = 'relu'))

我尝试实现一个自定义的丢失函数。损失函数的目标是最小化: 损耗=最大值(y_实际值,y_预测值)/最小值(y_实际值,y_预测值)

整个脚本如下所示:

def get_model():
    model = Sequential()
    model.add(Dense(512, activation = 'relu', input_dim = len(X[0])))
    model.add(Dense(512,input_dim = 200, activation = 'relu'))
    model.add(Dense(1, activation = 'relu'))
    optimizer = keras.optimizers.RMSprop(0.02)
    model.compile(loss=custom_loss, optimizer = optimizer)
    return model

def custom_loss(y_actual, y_predicted):
    error = []
    for i in range(len(y_actual)):
        if y_predicted[i] > y_actual[i]:
            error.append(y_predicted[i]/y_actual[i])
        else:
            error.append(y_actual[i]/y_predicted[i])

    return K.mean(error)

if __name__ == '__main__':
    run = 1
    X = np.load("vectors.npy")

    with open("target2.pickle", "rb") as file:
        target_dict = pickle.load(file)

    target_strings = [*target_dict]

    Y = np.array([])
    for str in target_strings:
        val = target_dict.get(str)
        Y = np.append(Y, val)


    for i in range(run):
        X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2)
        model = get_model()
        model.fit(X_train, Y_train, verbose=1, epochs = 10)
其中custom_loss(y_实际,y_预测)是我尝试实现的损失函数。但是,当我运行代码时,会出现以下错误:

/.local/lib/python3.8/site-packages/tensorflow/python/keras/backend.py:2261 mean
        if x.dtype.base_dtype == dtypes_module.bool:

    AttributeError: 'list' object has no attribute 'dtype'


如果您需要更多信息,请告诉我。

错误的原因是您正在将列表传递给tf.keras.backend.Mean,但函数需要张量


首先,我相信你需要将这个列表转换成一个张量,带有特定的数据类型。

是的,我开始读到这个,你是说tf.concat吗?你有什么建议吗?