Keras รุ่นที่ดีที่สุดสำหรับการจำแนกประเภทหลายประเภทคืออะไร?


30

ฉันกำลังทำงานวิจัยที่จำเป็นที่จะต้องเป็นหนึ่งในประเภทของผู้ชนะสามเหตุการณ์ = ( win, draw, lose)

WINNER  LEAGUE  HOME    AWAY    MATCH_HOME  MATCH_DRAW  MATCH_AWAY  MATCH_U2_50 MATCH_O2_50
3         13    550      571          1.86        3.34        4.23       1.66     2.11
3         7     322     334           7.55         4.1         1.4       2.17     1.61

รุ่นปัจจุบันของฉันคือ:

def build_model(input_dim, output_classes):
    model = Sequential()
    model.add(Dense(input_dim=input_dim, output_dim=12, activation=relu))
    model.add(Dropout(0.5))
    model.add(Dense(output_dim=output_classes, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adadelta')
    return model
  1. ฉันไม่แน่ใจว่าเป็นสิ่งที่ถูกต้องสำหรับการจำแนกหลายระดับ
  2. การตั้งค่าที่ดีที่สุดสำหรับการจำแนกเลขฐานสองคืออะไร?

แก้ไข: # 2 - เช่นนั้น?

model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')

1
คุณหมายถึง "model" หรือเพียงแค่หมายถึงตัวเลือกของเลเยอร์สุดท้ายactivation='softmax'และตัวเลือกคอมไพล์loss='categorical_crossentropy'ใช่หรือไม่ IMO ตัวเลือกของคุณสำหรับผู้ที่ดีสำหรับแบบจำลองเพื่อทำนายคลาสที่ไม่เกิดร่วมกันหลายคลาส หากคุณต้องการคำแนะนำเกี่ยวกับแบบจำลองทั้งหมดนั้นแตกต่างกันมากและคุณควรอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่คุณเป็นกังวลมิฉะนั้นจะมีคำอธิบายมากเกินไปในคำตอบเดียว
Neil Slater

ฉันหมายถึงarchitectureส่วนใหญ่ของชั้น มีคำแนะนำสำหรับคำถามของฉัน # 2 หรือไม่
SpanishBoy

1
ไม่ค่อยมีวิธีที่ "ถูกต้อง" ในการสร้างสถาปัตยกรรมซึ่งควรเป็นสิ่งที่คุณทดสอบด้วย meta-params ที่แตกต่างกันและควรใช้ผลลัพธ์เป็นตัวขับเคลื่อน (รวมถึงข้อ จำกัด ใด ๆ ที่คุณอาจมีในการใช้ทรัพยากร สำหรับ # 2 คุณสามารถมีเอาต์พุตสองตัวที่มี softmax คล้ายกับตอนนี้หรือคุณสามารถมีเลเยอร์เอาต์พุตที่มีหนึ่งเอาต์พุตactivation='sigmoid'และloss='binary_crossentropy'
Neil Slater

activation='sigmoid'ในชั้นเอาท์พุท เลเยอร์ที่ซ่อนอยู่อาจยังคง'relu'เหมือนเดิม (แม้ว่าฉันจะเริ่มด้วย'tanh'ปัญหานี้นั่นเป็นความชอบส่วนตัวที่ได้รับการสนับสนุนทางทฤษฎีน้อยมาก)
Neil Slater

คำตอบ:


35

ตัวเลือกของคุณactivation='softmax'ในเลเยอร์สุดท้ายและตัวเลือกการคอมไพล์loss='categorical_crossentropy'เป็นสิ่งที่ดีสำหรับแบบจำลองเพื่อทำนายคลาสที่ไม่เกิดร่วมกันหลายคลาส

เกี่ยวกับตัวเลือกทั่วไปมากขึ้นไม่ค่อยมีวิธี "ขวา" ในการสร้างสถาปัตยกรรม แต่นั่นควรเป็นสิ่งที่คุณทดสอบด้วย meta-params ที่แตกต่างกัน (เช่นขนาดเลเยอร์จำนวนเลเยอร์จำนวนดร็อปเอาท์) และควรเป็นผลลัพธ์ที่ได้รับการสนับสนุน (รวมถึงข้อ จำกัด ที่คุณอาจมีในการใช้ทรัพยากร ใช้ ฯลฯ )

ใช้ชุดการตรวจสอบข้ามเพื่อช่วยเลือกสถาปัตยกรรมที่เหมาะสม เมื่อเสร็จแล้วเพื่อให้ได้การวัดประสิทธิภาพทั่วไปที่แม่นยำยิ่งขึ้นของแบบจำลองของคุณคุณควรใช้ชุดทดสอบแยกต่างหาก ควรใช้ข้อมูลที่จัดเก็บจากชุดการฝึกอบรมของคุณแยกเป็นชุด CV การแบ่งที่สมเหตุสมผลอาจ 60/20/20 รถไฟ / cv / ทดสอบขึ้นอยู่กับจำนวนข้อมูลที่คุณมีและจำนวนที่คุณต้องรายงานตัวเลขสุดท้ายที่ถูกต้อง

สำหรับคำถาม # 2 คุณสามารถเพียงแค่มีสองออกด้วย softmax สุดท้ายคล้ายกับตอนนี้หรือคุณสามารถมีสุดท้ายชั้นกับหนึ่งในการส่งออกและactivation='sigmoid'loss='binary_crossentropy'

จากความรู้สึกที่บริสุทธิ์จากสิ่งที่อาจใช้ได้กับข้อมูลนี้ฉันขอแนะนำให้ลอง'tanh'หรือ'sigmoid'เปิดใช้งานในเลเยอร์ที่ซ่อนอยู่แทน'relu'และฉันจะแนะนำให้เพิ่มจำนวนของเซลล์ประสาทที่ซ่อนอยู่ (เช่น 100) และลดจำนวนการออกกลางคัน ( เช่น 0.2) Caveat: ความรู้สึกที่ไม่ดีต่อสถาปัตยกรรมเครือข่ายประสาทนั้นไม่ใช่เรื่องทางวิทยาศาสตร์ ลองและทดสอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.