เป็นไปได้หรือไม่ที่จะใช้ softmaxes mutiple ในเลเยอร์สุดท้ายใน Keras ดังนั้นผลรวมของโหนด 1-4 = 1; 5-8 = 1; เป็นต้น
ฉันควรจะไปออกแบบเครือข่ายอื่นหรือไม่?
เป็นไปได้หรือไม่ที่จะใช้ softmaxes mutiple ในเลเยอร์สุดท้ายใน Keras ดังนั้นผลรวมของโหนด 1-4 = 1; 5-8 = 1; เป็นต้น
ฉันควรจะไปออกแบบเครือข่ายอื่นหรือไม่?
คำตอบ:
ฉันจะใช้ส่วนต่อประสานการทำงาน
บางสิ่งเช่นนี้
from keras.layers import Activation, Input, Dense
from keras.models import Model
from keras.layers.merge import Concatenate
input_ = Input(shape=input_shape)
x = input_
x1 = Dense(4, x)
x2 = Dense(4, x)
x3 = Dense(4, x)
x1 = Activation('softmax')(x1)
x2 = Activation('softmax')(x2)
x3 = Activation('softmax')(x3)
x = Concatenate([x1, x2, x3])
model = Model(inputs=input_, outputs=x)
categorical_accuracy
และpredict_classes
วิธีการอาจต้องการความคิดมากกว่านี้ . .
มันเป็นไปได้เพียงแค่ใช้ฟังก์ชั่น softmax ของคุณเอง คุณสามารถแยกเมตริกซ์เป็นชิ้นส่วนจากนั้นคำนวณ softmax แยกกันต่อชิ้นส่วนและต่อส่วนเทนเซอร์ดังนี้
def custom_softmax(t):
sh = K.shape(t)
partial_sm = []
for i in range(sh[1] // 4):
partial_sm.append(K.softmax(t[:, i*4:(i+1)*4]))
return K.concatenate(partial_sm)
concatenate
ไม่มีอาร์กิวเมนต์แกนเชื่อมต่อกันผ่านแกนสุดท้าย (ในแกนตัวพิมพ์ของเรา = 1)
จากนั้นคุณสามารถรวมฟังก์ชันการเปิดใช้งานนี้ในเลเยอร์ที่ซ่อนอยู่หรือเพิ่มเข้าไปในกราฟ
Dense(activation=custom_activation)
หรือ
model.add(Activation(custom_activation))
นอกจากนี้คุณยังจำเป็นต้องกำหนดฟังก์ชั่นค่าใช้จ่ายใหม่