Entropi silang kategoris tidak berfungsi dengan fitur enkode one-hot

Aug 18 2020

Saya sedang berjuang dengan masalah kategorikal_crossentropy dengan data enkode one-hot. Masalahnya adalah pada keluaran kode yang tidak berubah yang disajikan di bawah ini:

            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

Beberapa kata tentang data: 1190 fitur ( 10 fitur aktual dengan 119 kategori). Inputnya adalah baris kerangka data dengan 1190 nilai per sampel. Output adalah nilai biner 0 atau 1.

Upaya yang dilakukan sebelumnya: binary_crossentropy digunakan dengan hasil yang memuaskan, namun jumlah sampel tidak cukup untuk mendapatkan hasil yang baik pada data validasi. Mencoba menggunakan aktivasi dan ukuran lapisan yang berbeda.

Pertanyaan utama adalah mengapa kategorikal_crossentropy tidak berfungsi dan bagaimana menggunakannya dengan cara yang benar.

Juga, satu kekhawatiran muncul tentang representasi data apakah cara yang benar untuk digunakan dalam satu baris langka data yang disandikan langsung ke satu arah?

Jawaban

10xAI Aug 18 2020 at 13:52

Agar berhasil -

  1. Ubah jumlah neuron keluaran menjadi 02
  2. Aktivasi keluaran ke Softmax
  3. Simpan semua vektor keluaran OHE


Beginilah cara Keras dirancang secara internal. Hal yang sama telah tertulis di halaman dokumentasi resmi

Kelas BinaryCrossentropy
Gunakan kerugian cross-entropy ini jika hanya ada dua kelas label (diasumsikan 0 dan 1). Untuk setiap contoh, harus ada satu nilai floating-point per prediksi. Dalam cuplikan di bawah, masing-masing dari empat contoh hanya memiliki satu nilai floating-pointing, dan y_pred dan y_true memiliki bentuk [batch_size]

CategoricalCrossentropy class
Bentuk dari y_pred dan y_true adalah [batch_size, num_classes]

Dan kami tahu bahwa untuk mempertahankan Klasifikasi multi-kelas Anda perlu membuat semua keluaran num_class relatif satu sama lain, jadi kami menggunakan softmax

Ref
Keras halaman resmi
mirip SE thread Thread
SE serupa