Apa model Keras terbaik untuk klasifikasi multi-kelas?

30

Saya bekerja pada penelitian, di mana kebutuhan untuk satu mengklasifikasikan tiga acara WINNER = ( 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

Model saya saat ini adalah:

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. Saya tidak yakin itu yang benar untuk klasifikasi multi-kelas
  2. Apa pengaturan terbaik untuk klasifikasi biner?

EDIT: # 2 - Seperti itu?

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')
SpanishBoy
sumber
1
Apakah maksud Anda "model", atau hanya merujuk pada pilihan layer terakhir activation='softmax'dan kompilasi pilihan loss='categorical_crossentropy'? IMO, pilihan Anda untuk itu bagus untuk model untuk memprediksi beberapa kelas yang saling eksklusif. Jika Anda ingin saran tentang keseluruhan model, itu sangat berbeda, dan Anda harus menjelaskan lebih banyak tentang apa yang menjadi perhatian Anda, jika tidak ada terlalu banyak untuk dijelaskan dalam satu jawaban.
Neil Slater
Maksud saya tentang architecturelapisan kebanyakan. Adakah saran untuk pertanyaan saya # 2?
SpanishBoy
1
Jarang ada cara "benar" untuk membangun arsitektur, yang seharusnya menjadi sesuatu yang Anda uji dengan meta-param yang berbeda, dan harus berdasarkan hasil (termasuk batas apa pun yang mungkin Anda miliki tentang penggunaan sumber daya untuk waktu pelatihan / penggunaan memori, dll). Untuk # 2, Anda dapat memiliki dua output dengan softmax yang sama dengan sekarang, atau Anda dapat memiliki layer output dengan satu output, activation='sigmoid'danloss='binary_crossentropy'
Neil Slater
activation='sigmoid'di lapisan output . Lapisan tersembunyi dapat tetap seolah- 'relu'olah Anda suka (walaupun saya mungkin akan mulai dengan 'tanh'untuk masalah ini, yaitu preferensi pribadi dengan sangat sedikit dukungan dari teori)
Neil Slater

Jawaban:

35

Pilihan Anda activation='softmax'di lapisan terakhir dan kompilasi pilihan loss='categorical_crossentropy'yang baik untuk model untuk memprediksi beberapa kelas yang saling eksklusif.

Mengenai pilihan yang lebih umum, jarang ada cara "benar" untuk membangun arsitektur. Alih-alih itu harus menjadi sesuatu yang Anda uji dengan meta-param yang berbeda (seperti ukuran lapisan, jumlah lapisan, jumlah drop-out), dan harus didorong oleh hasil (termasuk batas apa pun yang mungkin Anda miliki tentang penggunaan sumber daya untuk waktu / memori pelatihan) gunakan dll).

Gunakan set validasi silang untuk membantu memilih arsitektur yang sesuai. Setelah selesai, untuk mendapatkan ukuran kinerja umum model yang lebih akurat, Anda harus menggunakan set tes terpisah. Data yang disimpan dari set pelatihan Anda terpisah dengan set CV harus digunakan untuk ini. Pemisahan yang masuk akal mungkin 60/20/20 kereta / cv / test, tergantung pada berapa banyak data yang Anda miliki, dan seberapa banyak Anda perlu melaporkan angka akhir yang akurat.

Untuk Pertanyaan # 2, Anda dapat memiliki dua output dengan final softmax yang sama dengan sekarang, atau Anda dapat memiliki layer final dengan satu output, activation='sigmoid'dan loss='binary_crossentropy'.

Murni dari firasat dari apa yang mungkin bekerja dengan data ini, saya akan menyarankan mencoba dengan 'tanh'atau 'sigmoid'aktivasi di lapisan tersembunyi, alih-alih 'relu', dan saya juga menyarankan peningkatan jumlah neuron tersembunyi (misalnya 100) dan mengurangi jumlah putus sekolah ( mis. 0.2). Peringatan: Perasaan sakit pada arsitektur jaringan saraf tidak ilmiah. Cobalah, dan ujilah.

Neil Slater
sumber