如何在Keras的每个输出中应用sigmoid函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Keras的每个输出中应用sigmoid函数?相关的知识,希望对你有一定的参考价值。
这是我的代码的一部分。
model = Sequential()
model.add(Dense(3, input_shape=(4,), activation='softmax'))
model.compile(Adam(lr=0.1),
loss='categorical_crossentropy',
metrics=['accuracy'])
使用此代码,它将立即将softmax应用于所有输出。所以输出表明所有的概率。但是,我正在研究非独占分类,这意味着我希望输出具有独立的概率。对不起,我的英语不好......但我想做的是对每个输出应用sigmoid函数,以便它们具有独立的概率。
答案
您可以尝试使用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])
另一答案
无需像接受的答案所建议的那样创建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 ]]
如您所见,类概率彼此独立。 sigmoid分别适用于每个类。
以上是关于如何在Keras的每个输出中应用sigmoid函数?的主要内容,如果未能解决你的问题,请参考以下文章