簡體   English   中英

如何在Keras中為每個輸出應用S型函數?

[英]How to apply sigmoid function for each outputs in Keras?

這是我的代碼的一部分。

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

使用此代碼,它將立即將softmax應用於所有輸出。 因此,輸出表明了所有可能性。 但是,我正在研究非排他性classifire,這意味着我希望輸出具有獨立的概率。 抱歉,我的英語不好。但是我想要做的是對每個輸出應用S形函數,以便它們具有獨立的概率。

無需創建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)

輸出獨立概率:

[[0.58463055 0.53531045 0.51800555]
 [0.56402034 0.51676977 0.506389  ]
 [0.665879   0.58982867 0.5555959 ]
 [0.66690147 0.57951677 0.5439698 ]
 [0.56204814 0.54893976 0.5488999 ]]

如您所見,類的概率彼此獨立。 乙狀結腸分別應用於每個類別。

您可以嘗試使用Functional 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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM