【问题标题】:Custom loss issues in tensorflow张量流中的自定义损失问题
【发布时间】:2020-10-21 19:35:54
【问题描述】:

我尝试实现自定义损失函数。损失函数的目标是最小化: loss = max(y_actual,y_predicted)/min(y_actual, y_predicted)

整个脚本如下:

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_actual, y_predicted) 是我尝试实现的损失函数。但是,当我运行代码时,出现以下错误:

/.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'

非常感谢您的意见,如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: tensorflow keras loss-function


    【解决方案1】:

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

    首先,我认为您需要将该列表转换为具有特定 dtype 的张量。

    【讨论】:

    • 是的,我开始读到了,你是说 tf.concat 吗?你有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 2019-09-20
    • 2017-09-02
    • 2021-06-12
    • 2018-12-16
    • 2021-11-18
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多