จะใช้ Softmax เป็นฟังก์ชั่น Activation ใน Multi-layer Perceptron ใน scikit-Learn ได้อย่างไร? [ปิด]


9

ฉันจำเป็นต้องใช้ฟังก์ชั่นการเปิดใช้งาน Softmax กับ Perceptron หลายเลเยอร์ใน scikit Scikit documantationในหัวข้อของ Neural network models (ภายใต้การดูแล) กล่าวว่า"MLPClassifier รองรับการจำแนกประเภทหลายคลาสโดยใช้ Softmax เป็นฟังก์ชันเอาต์พุต" คำถามคือวิธีการใช้ฟังก์ชั่น?

ในโค้ด snip ด้านล่างเมื่อฉันเพิ่ม Softmax ภายใต้พารามิเตอร์การเปิดใช้งานมันไม่ยอมรับ

MLPClassifier(activation='Softmax', alpha=1e-05, batch_size='auto',
       beta_1=0.9, beta_2=0.999, early_stopping=False,
       epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant',
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
       solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
       warm_start=False)

รหัสข้อผิดพลาดคือ:

ValueError: ไม่รองรับการเปิดใช้งาน 'Softmax' การเปิดใช้งานที่รองรับคือ ('identity', 'logistic', 'tanh', 'relu')

มีวิธีการใช้ฟังก์ชั่นการเปิดใช้งาน Softmax สำหรับการจัดหมวดหมู่หลายคลาสใน scikit-Learn หรือไม่?

คำตอบ:


7

ฉัน suposse ว่าฟังก์ชั่น Softmax mlp.predict_proba(X)ถูกนำไปใช้เมื่อคุณร้องขอการทำนายความน่าจะเป็นโดยการเรียกวิธีการ

เพื่อสนับสนุนการคาดคะเนของฉันฉันได้พัฒนาการทดสอบขนาดเล็กนี้

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
import numpy as np

X,Y = load_iris().data, load_iris().target

mlp = MLPClassifier()
mlp.fit(X, Y)

print mlp.predict([3.1,  2.5,  8.4,  2.2])
print mlp.predict_proba([3.1,  2.5,  8.4,  2.2])
print "sum: %f"%np.sum(mlp.predict_proba([3.1,  2.5,  8.4,  2.2]))

โปรดสังเกตว่าไม่ว่าจะเสียบค่าใดไว้predict_proba()เวกเตอร์ความน่าจะเป็นเอาต์พุตจะรวมกันได้ถึง 1 ซึ่งสามารถทำได้โดยฟังก์ชันการเปิดใช้งาน Softmax เท่านั้น (การใช้การเปิดใช้งานอื่นที่ Softmax ไม่มีการรับประกันว่าผลรวมของการเปิดใช้งานในรอบสุดท้าย เลเยอร์จะเป็นหนึ่งเดียวโดยเฉพาะสำหรับตัวอย่างที่มองไม่เห็น)

หากการเดาของฉันถูกต้องให้ดูที่เอกสารฉันไม่สามารถหาวิธีใด ๆ ในการรับเอาท์พุทของเครือข่ายก่อน Softmax ... อาจเป็นเพราะคลาสนี้มีไว้สำหรับการจัดหมวดหมู่เท่านั้น (ไม่ใช่การถดถอยหรือการตั้งค่าอื่น ๆ


4

MLPClassifier สามารถใช้สำหรับ "การจำแนกประเภทหลายคลาส", "การจำแนกประเภทไบนารี" และ "การจำแนกประเภทหลายชั้น" ดังนั้นชั้นเลเยอร์เอาท์จึงตัดสินใจตามชนิดของ Y:

  1. Multiclass : ชั้นนอกสุดคือชั้น softmax

  2. Multilabel หรือคลาสไบนารี : เลเยอร์ภายนอกสุดคือโลจิสติก / sigmoid

  3. การถดถอย : เลเยอร์นอกสุดเป็นข้อมูลเฉพาะตัว

ส่วนหนึ่งของรหัสจาก sklearn ที่ใช้ใน MLPClassifier ซึ่งยืนยันได้:

        # Output for regression
        if not is_classifier(self):
            self.out_activation_ = 'identity'
        # Output for multi class
        elif self._label_binarizer.y_type_ == 'multiclass':
            self.out_activation_ = 'softmax'
        # Output for binary class and multi-label
        else:
            self.out_activation_ = 'logistic'
  1. การจัดประเภทหลายคลาส: สำหรับ Feature X สามารถมีได้หนึ่งคลาสเท่านั้น เช่นการวิเคราะห์ความเชื่อมั่นที่ได้รับข้อความ (X) เป็นผลลัพธ์ (Y) เป็นบวกเป็นกลางหรือลบ Binary เป็นกรณีของ Multiclass ที่มีเอาต์พุตที่เป็นไปได้เพียง 2 ตัว
  2. การจำแนกหลายระดับ: สำหรับ Feature X สามารถมีได้หลายคลาส

1

ไม่เห็นด้วยกับคำตอบจาก Daniel Lopez ในกรณีของฉันตอบ answer_proba () ไม่ได้ผลลัพธ์ softmax

คำตอบจาก TrideepRath สามารถแก้ปัญหานี้ได้อย่างง่ายดาย หากต้องการใช้ softmax กำหนด out_activation_:

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