Neural network sigmoid函数在神经网络中的位置重要吗?

Neural network sigmoid函数在神经网络中的位置重要吗?,neural-network,keras,backpropagation,Neural Network,Keras,Backpropagation,我正试图用带有自定义损失的Keras在python中构建一个神经网络,我在想,在最后一层中作为激活函数的sigmoid函数和在自定义损失的开头使用sigmoid函数是否相同。我的意思是: 我有一种感觉,在第二个模型中,损失是计算出来的,但它不是通过乙状结肠反向传播的,而在第一个模型中,它是。是这样吗 事实上,在第二种情况下,反向传播不会通过乙状结肠。在丢失函数中更改数据是一件非常糟糕的事情 这样做是不好的,因为这样,您将在输出上反向传播一个错误,这不是网络正在产生的真正错误 用一个简单的例子来

我正试图用带有自定义损失的Keras在python中构建一个神经网络,我在想,在最后一层中作为激活函数的sigmoid函数和在自定义损失的开头使用sigmoid函数是否相同。我的意思是:


我有一种感觉,在第二个模型中,损失是计算出来的,但它不是通过乙状结肠反向传播的,而在第一个模型中,它是。是这样吗

事实上,在第二种情况下,反向传播不会通过乙状结肠。在丢失函数中更改数据是一件非常糟糕的事情

这样做是不好的,因为这样,您将在输出上反向传播一个错误,这不是网络正在产生的真正错误

用一个简单的例子来解释我自己: 您有二进制形式的标签,比如张量
[0,0,1,0]
如果您的sigmoid位于自定义丢失函数中,您可能会有如下输出:
[-100,0,20,100],
丢失中的sigmoid会将其转换为类似tihs的内容:
[0,0.5,1,1]
然后,将反向传播的错误将是
[0,-0.5,0,-1]
。反向传播将不考虑sigmoid,您将直接将此错误应用于输出。您可以看到,错误的大小根本不反映输出错误的大小:最后一个值是100,应该在负区域,但模型将在该层上反向传播-1的小错误


总而言之,乙状结肠必须在网络中,以便在反向传播错误时反向传播将其考虑在内。

太棒了!谢谢你的回答,我真的很感激你能给我们一个你正在使用的代码吗?这真的很有趣。