Python 如何为Keras中的每个输出应用sigmoid函数?

Python 如何为Keras中的每个输出应用sigmoid函数?,python,machine-learning,keras,deep-learning,sigmoid,Python,Machine Learning,Keras,Deep Learning,Sigmoid,这是我代码的一部分 model = Sequential() model.add(Dense(3, input_shape=(4,), activation='softmax')) model.compile(Adam(lr=0.1), loss='categorical_crossentropy', metrics=['accuracy']) 使用此代码,它将同时对所有输出应用softmax。因此,输出表示所有事件之间的概率。但是,我正在处理非独占Cl

这是我代码的一部分

model = Sequential()
model.add(Dense(3, input_shape=(4,), activation='softmax'))
model.compile(Adam(lr=0.1),
          loss='categorical_crossentropy',
          metrics=['accuracy'])
使用此代码,它将同时对所有输出应用softmax。因此,输出表示所有事件之间的概率。但是,我正在处理非独占ClassFire,这意味着我希望输出具有独立的概率。 对不起,我的英语不好。。。
但我想做的是将sigmoid函数应用于每个输出,以便它们具有独立的概率。

您可以尝试使用函数API创建一个包含n个输出的模型,其中每个输出都使用
sigmoid
激活

你可以这样做

in = Input(shape=(4, ))

dense_1 = Dense(units=4, activation='relu')(in)

out_1 = Dense(units=1, activation='sigmoid')(dense_1)
out_2 = Dense(units=1, activation='sigmoid')(dense_1)
out_3 = Dense(units=1, activation='sigmoid')(dense_1)

model = Model(inputs=[in], outputs=[out_1, out_2, out_3])
没有必要像公认答案所建议的那样创建3个单独的输出

只需一行即可获得相同的结果:

model.add(Dense(3, input_shape=(4,), activation='sigmoid'))

您只需对最后一层使用
'sigmoid'
激活即可:

from tensorflow.keras.layers import GRU
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation
import numpy as np

from tensorflow.keras.optimizers import Adam

model = Sequential()
model.add(Dense(3, input_shape=(4,), activation='sigmoid'))
model.compile(Adam(lr=0.1),
          loss='categorical_crossentropy',
          metrics=['accuracy'])

pred = model.predict(np.random.rand(5, 4))
print(pred)
独立概率的输出:

model.add(Dense(3, input_shape=(4,), activation='sigmoid'))


正如您所看到的,这些类的概率是相互独立的。sigmoid分别应用于每个类。

哇,我明白了。我想我把Sigmoid和softmax搞混了。。。如果我使用softmax,它不会是独立的概率,对吗?我只需要使用sigmoid。确切地说,softmax为您提供了所有输出的概率分布,而sigmoid只是将您的输出映射到0和1之间的值。但每个值都是独立的。因此,没有必要像“Sreeram TP”的答案所建议的那样这样做。仅使用sigmoid将得到相同的结果。我的独立概率在sigmoid中没有增加([0.08844085 0.00417994])。使用softmax我得到了正确的结果。将其更改为softmax([0.98502016 0.0149798])。为什么它在sigmoid中表现不好?@GiriAnnamalaiM Softmax和sigmoid是两个完全不同的功能,用于完全不同的目的。解释这种差异太难了。我强烈建议您多读一点关于Sigmoid和Softmax的内容,并尝试理解它们之间的区别。如果你仍然卡住了,你可以在这里问一个问题,包括问题的必要细节@blue phoenox我就此事提出了一个问题。检查这个