我正在训练一个keras模型,其最后一层是一个sigmoid
单元:
output = Dense(units=1, activation='sigmoid')
我用一些训练数据训练这个模型,其中预期输出总是一个介于0.0和1.0之间的数字。 我使用均方误差编译模型:
model.compile(optimizer='adam', loss='mse')
由于预期输出和实际输出都是介于0和1之间的单浮点数,因此我也希望损失在0和1之间,但是当我开始训练时,我得到的损失是3.3932
,大于1
我错过什么了吗
编辑: 我添加了一个示例来说明问题: https://drive.google.com/file/d/1fBBrgW-HlBYhG-BUARjTXn3SpWqrHHPK/view?usp=sharing (我不能只是粘贴代码,因为我需要附加培训数据)
运行python stackoverflow.py
后,将显示模型的摘要以及培训过程。
我还在每一步打印y_true的最小值和最大值,以验证它们是否在[0,1]范围内。
无需等待训练结束,您将看到前几个时期的损失远远大于1
首先,我们可以揭开
mse
丢失的神秘面纱-它是tf.keras
中的一个正常可调用函数:接下来,正如名称“均方误差”所暗示的,它是一个平均值,这意味着传递给它的向量的大小不会改变值,只要平均值相同:
print(mse([1] * 10, [0] * 10)) # tf.Tensor(1, shape=(), dtype=int32)
为了使
mse
超过1,平均误差必须超过1:最后,sigmoid确实保证输出介于0和1之间:
这意味着在代码中,
y_true
的平均值不在0和1之间您可以用
np.mean(y_true)
来验证这一点我对这个问题没有答案。我在MSE损耗中得到NaN,输入在[0,1]范围内,输出在sigmoid。所以我认为这个问题是相关的
以下是一些关于乙状结肠的观察结果:
所以,有可能让南斯离开乙状结肠。以防万一有人(我,在不久的将来)有这种怀疑(再次)
相关问题 更多 >
编程相关推荐