เอนโทรปีข้ามหมวดหมู่ทำงานผิดกับคุณลักษณะที่เข้ารหัสแบบร้อนเดียว

Aug 18 2020

ฉันกำลังดิ้นรนกับปัญหาการจัดหมวดหมู่กับข้อมูลการเข้ารหัสแบบร้อนแรง ปัญหาอยู่ในผลลัพธ์ที่ไม่เปลี่ยนแปลงของโค้ดที่แสดงด้านล่าง:

            inputs = keras.Input(shape=(1190,), sparse=True)
            lay_1 = layers.Dense(1190, activation='relu')
            x = lay_1(inputs)
            x = layers.Dense(10, activation='relu')(x)
            out = layers.Dense(1, activation='sigmoid')(x)
            self.model = keras.Model(inputs, out, name='SimpleD2Dense')
            self.model.compile(
                optimizer=keras.optimizers.Adam(),
                loss=tf.losses.categorical_crossentropy,
                metrics=['accuracy']
            )
Epoch 1/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 2/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 3/3
1572/1572 - 7s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543

คำไม่กี่คำเกี่ยวกับข้อมูล: คุณสมบัติ 1190 รายการ ( คุณสมบัติจริง10 รายการพร้อม119หมวดหมู่) อินพุตคือแถวดาต้าเฟรมที่มีค่า 1190 ต่อตัวอย่าง เอาต์พุตเป็นค่าไบนารี 0 หรือ 1

ความพยายามที่ทำมาก่อน: binary_crossentropy ใช้แล้วได้ผลลัพธ์ที่น่าพอใจอย่างไรก็ตามจำนวนตัวอย่างไม่เพียงพอที่จะได้ผลลัพธ์ที่ดีในข้อมูลการตรวจสอบความถูกต้อง พยายามใช้การเปิดใช้งานและขนาดเลเยอร์ที่แตกต่างกัน

คำถามหลักคือทำไมหมวดหมู่ _crossentropy ไม่ทำงานและจะใช้อย่างไรให้ถูกวิธี

นอกจากนี้ข้อกังวลหนึ่งที่ปรากฏขึ้นเกี่ยวกับการแสดงข้อมูลเป็นวิธีที่ถูกต้องในการใช้ข้อมูลที่เข้ารหัสแบบ one-hot แบบตรงไปตรงมาหนึ่งแถวที่หายาก

คำตอบ

10xAI Aug 18 2020 at 13:52

เพื่อให้ใช้งานได้ -

  1. เปลี่ยนเซลล์ประสาทขาออกนับเป็น02
  2. การเปิดใช้งานเอาต์พุตไปยังSoftmax
  3. เก็บเวกเตอร์ทั้งหมดของเอาต์พุต OHE


นี่คือวิธีที่ Keras ได้รับการออกแบบภายใน มีการเขียนเช่นเดียวกันในหน้าเอกสารอย่างเป็นทางการ

คลาส BinaryCrossentropy
ใช้การสูญเสียข้ามเอนโทรปีนี้เมื่อมีเพียงสองคลาสเลเบล (สมมติว่าเป็น 0 และ 1) สำหรับแต่ละตัวอย่างควรมีค่าทศนิยมหนึ่งค่าต่อการคาดคะเน ในตัวอย่างด้านล่างแต่ละตัวอย่างทั้งสี่มีค่าการชี้ลอยเพียงค่าเดียวและทั้ง y_pred และ y_true มีรูปร่าง [batch_size]

หมวดหมู่คลาส
Crossentropy รูปร่างของทั้ง y_pred และ y_true คือ [batch_size, num_classes]

และเรารู้ว่าในการเก็บ Classification multi-classคุณต้องทำให้เอาต์พุตnum_classทั้งหมดสัมพันธ์กันดังนั้นเราจึงใช้softmax

Ref
Keras หน้าอย่างเป็นทางการ
เธรด
SE ที่คล้ายกันเธรด SE ที่คล้ายกัน