首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Keras中自定义损失函数的输出应该是什么?

在Keras中自定义损失函数的输出应该是什么?
EN

Stack Overflow用户
提问于 2019-05-26 23:50:38
回答 2查看 1.7K关注 0票数 2

我试图在Keras中构建一个自定义损失函数,但我对它的工作方式感到困惑。我正在批量训练网络,我不确定损失函数的输出是否应该是与批量维数相同的数组,还是只是一个标量。

EN

回答 2

Stack Overflow用户

发布于 2019-05-27 00:50:31

正如文档keras loss中所述,您可以传递一个函数,该函数为每个数据点返回一个标量,并接受两个参数: y_true (真标签)和y_pred (预测)。

Keras在批处理中执行mean over sample,因此输出应该只是一个标量。

票数 3
EN

Stack Overflow用户

发布于 2019-05-27 00:31:40

在小批量的所有维度上损失通常都会减少。如果不应用return,它将被隐式执行(尝试删除custom_loss_function()中的tf.reduce_mean并只返回res)。例如:

代码语言:javascript
复制
import tensorflow as tf
import numpy as np

def custom_cross_entropy(y_true, y_pred):
    res = -y_true*tf.math.log(tf.nn.softmax(y_pred))
    return tf.reduce_mean(res, axis=None)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(2, activation=None))

model.compile(optimizer=tf.keras.optimizers.SGD(0.01),
              loss=[custom_cross_entropy],
              metrics=['accuracy'])

y_train = np.array([[1, 0], [0, 1]])
x_train = np.random.normal(size=(2, 2))

model.fit(x_train, y_train, epochs=2)

# Epoch 1/2
# 2/2 [==============================] - 0s 13ms/sample - loss: 0.2689 - accuracy: 1.0000
# Epoch 2/2
# 2/2 [==============================] - 0s 2ms/sample - loss: 0.2686 - accuracy: 1.0000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56315059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档