Mengapa model Keras saya belajar mengenali latar belakang?

9

Saya mencoba untuk melatih implementasi Keras Deeplabv3 + ini pada Pascal VOC2012, menggunakan model yang sudah dilatih sebelumnya (yang juga dilatih tentang dataset itu).

Saya mendapat hasil yang aneh dengan akurasi dengan cepat konvergen ke 1.0:

5/5 [==============================] - 182s 36s/step - loss: 26864.4418 - acc: 0.7669 - val_loss: 19385.8555 - val_acc: 0.4818
Epoch 2/3
5/5 [==============================] - 77s 15s/step - loss: 42117.3555 - acc: 0.9815 - val_loss: 69088.5469 - val_acc: 0.9948
Epoch 3/3
5/5 [==============================] - 78s 16s/step - loss: 45300.6992 - acc: 1.0000 - val_loss: 44569.9414 - val_acc: 1.0000

Pengujian model juga memberikan akurasi 100%.

Saya memutuskan untuk merencanakan prediksi pada kumpulan gambar acak yang sama sebelum dan sesudah pelatihan, dan menemukan bahwa model tersebut didorong untuk mengatakan bahwa semuanya hanyalah latar belakang (itulah kelas 1 di Pascal VOC2012).

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Saya cukup baru dalam belajar mendalam dan akan membutuhkan bantuan untuk mencari tahu dari mana ini bisa berasal.

Saya pikir mungkin itu adalah fungsi kerugian saya, yang saya definisikan sebagai:

def image_categorical_cross_entropy(y_true, y_pred):
    """
    :param y_true: tensor of shape (batch_size, height, width) representing the ground truth.
    :param y_pred: tensor of shape (batch_size, height, width) representing the prediction.
    :return: The mean cross-entropy on softmaxed tensors.
    """
    return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true))

Saya agak tidak yakin apakah tensor saya memiliki bentuk yang tepat. Saya menggunakan dataset API TF untuk memuat .tfrecordfile, dan tensor anotasi saya berbentuk (batch_size, height, width). Apakah (batch_size, height, width, 21)yang dibutuhkan? Kesalahan lain dari dalam model muncul ketika saya mencoba untuk memisahkan gambar penjelasan menjadi tensor yang berisi 21 gambar (satu untuk setiap kelas):

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [12,512,512,21] vs. [12,512,512]
         [[Node: metrics/acc/Equal = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/ArgMax, metrics/acc/ArgMax_1)]]
         [[Node: training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1/_13277 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:1", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_62151_training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:1"]()]]

Terima kasih untuk bantuannya!

Mat
sumber
5
Cukup beberapa item untuk dipertimbangkan di sini, saya hampir tidak tahu harus mulai dari mana (1) apakah Anda menggunakan ukuran sampel 5 untuk pelatihan ??? (2) Apa, jika ada, pra-pemrosesan yang Anda lakukan untuk gambar Anda? Saya merasa jawabannya ada di sini dan (3) Anda harus memberikan lebih banyak informasi tentang model Anda. Berapa banyak sampel berlabel yang Anda miliki? Berapa banyak kategori yang memungkinkan? Apakah Anda memiliki perangkat pelatihan yang seimbang? (4) akurasi Anda pada dasarnya tidak berarti apa-apa karena kerugian Anda sangat tinggi dan meningkat. Kehilangan Anda harus berkurang saat akurasi Anda meningkat.
I_Play_With_Data
(1) Saya menggunakan kumpulan ukuran 12 tetapi ini agak tidak relevan menurut saya. Saya hanya menunjukkan 3 zaman kecil dari hanya 5 langkah di sini karena hanya seberapa cepat itu menyatu. (2) Preprocessing saya terdiri dari beberapa augmentasi dan rescaling (mungkin memotong) ke 512x512 untuk setiap gambar dan anotasi yang terkait. (3) ada sekitar 11.500 gambar berlabel di Pascal VOC 2012. Diberikan sebagian besar makalah mencapai 85% + mIOU pada dataset ini, saya akan menganggapnya seimbang. Ada 20 kategori berbeda dalam dataset ini plus satu untuk latar belakang atau «ambigu», dengan total 21.
Matt
Saya ingin tahu. Apakah Anda menemukan alasan untuk hasil model Anda?
Mark.F
3
Jika Anda membagikan kode Anda, ada kemungkinan untuk menemukan kesalahan.
Dmytro Prylipko
1
Fakta bahwa model pra-terlatih menemukan cara untuk mendapatkan akurasi 100% dalam 3 zaman, menggunakan data yang sama seperti yang awalnya digunakan, membuat saya berpikir bugnya adalah bahwa label pelatihan Anda salah, mungkin semua diatur ke label yang sesuai ke latar belakang. Dalam kasus apa pun, lihat thread masalah ini , di mana orang mendiskusikan masalah dan solusi mereka untuk memperbaiki model. Model ini belum tentu rusak, dan bug batchnorm di Tensorflow dapat diatasi.
n1k31t4

Jawaban:

1

Model Anda terlalu pas. Setiap zaman hanya memiliki 5 gambar. Model ini "menghafal" jawaban untuk setiap gambar.

Untuk meminimalkan kemungkinan overfitting, tambah jumlah gambar. Seharusnya ada beberapa ribu contoh gambar untuk setiap kategori objek.

Brian Spiering
sumber