เอนโทรปีข้ามหมวดหมู่ทำงานผิดกับคุณลักษณะที่เข้ารหัสแบบร้อนเดียว
ฉันกำลังดิ้นรนกับปัญหาการจัดหมวดหมู่กับข้อมูลการเข้ารหัสแบบร้อนแรง ปัญหาอยู่ในผลลัพธ์ที่ไม่เปลี่ยนแปลงของโค้ดที่แสดงด้านล่าง:
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 แบบตรงไปตรงมาหนึ่งแถวที่หายาก
คำตอบ
เพื่อให้ใช้งานได้ -
- เปลี่ยนเซลล์ประสาทขาออกนับเป็น02
- การเปิดใช้งานเอาต์พุตไปยังSoftmax
- เก็บเวกเตอร์ทั้งหมดของเอาต์พุต 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 ที่คล้ายกัน