Pelatihan jaringan saraf encog java terlalu lambat

Saya sedang melatih jaringan saraf untuk mengklasifikasikan gambar dan membutuhkan waktu terlalu lama untuk menyelesaikan satu iterasi... sekitar lima menit dan masih belum selesai. Saya menggunakan Encog 3.1. Apakah ada yang salah dengan kode saya?

BasicNetwork network = new BasicNetwork();
        network.addLayer(new BasicLayer(null,true,5625));
        network.addLayer(new BasicLayer(new ActivationSigmoid(),true,(intIdealCount+5625)/2));
        network.addLayer(new BasicLayer(new ActivationSigmoid(),true,intIdealCount));
        network.getStructure().finalizeStructure();

ini kode pelatihan saya:

final ResilientPropagation train = new ResilientPropagation(network, trainingSet);

        int epoch = 1;

        do {
            train.iteration();
            System.out.println("Epoch #" + epoch + " Error:" + train.getError());
            epoch++;
        } while(train.getError() > 0.01);

Tanggapan apa pun akan dihargai. Terima kasih.


person Ray Lionfang    schedule 10.11.2013    source sumber
comment
Saya tidak familiar dengan perpustakaan ini, tapi saya familiar dengan pembelajaran mesin dan penerapannya pada pencitraan. Ini bisa memakan waktu lama...   -  person Steve P.    schedule 10.11.2013
comment
Hai, Maaf untuk OT, tapi saya memulai dengan encog dan ada beberapa hal yang saya tidak sepenuhnya mengerti. Bolehkah saya meminta sedikit waktu Anda untuk membantu? Jika ya, silakan periksa pertanyaan saya:stackoverflow.com/questions/21847695/ .Terima kasih   -  person user2886091    schedule 20.02.2014


Jawaban (1)


Kode Anda tampaknya baik-baik saja, tetapi pelatihan bisa memakan waktu lama tergantung pada data Anda. Dari ukuran jaringan Anda, seseorang dapat menyimpulkan, bahwa Anda bekerja dengan gambar - sekarang jika Anda memiliki banyak gambar - bahkan implementasi yang paling efisien pun akan memakan waktu lama. Encog adalah kode yang cukup bagus - secara default berfungsi pada semua inti yang tersedia, tetapi FANN tampaknya merupakan perpustakaan tercepat untuk ANN saat ini.

Anda memiliki ~5000 neuron masukan, dengan asumsi Anda memiliki ~10 neuron keluaran, Anda memiliki ~2500 neuron tersembunyi. Jadi jaringan Anda memiliki (5000+1)*2500 + (2500+1)*10 bobot (sekitar 12.500.000). Sekarang, dengan asumsi Anda memiliki N gambar di set pelatihan Anda - satu periode memerlukan komputasi (dan pembaruan) sebesar 12.500.000 * N nilai. Jadi meskipun Anda hanya memiliki ~200 gambar, itu berarti 2.500.000.000 pembaruan yang harus dihitung.

Setidaknya ada tiga cara yang mungkin:

  • Coba perpustakaan FANN, yang merupakan salah satu perpustakaan paling efisien
  • Kurangi dimensi gambar Anda menggunakan PCA misalnya (dan sebagai hasilnya - kurangi ukuran jaringan)
  • Apakah Anda yakin membutuhkan 2500 node tersembunyi? Jumlahnya cukup banyak
person lejlot    schedule 10.11.2013
comment
berapa banyak lapisan tersembunyi yang Anda sarankan? saya sedang mengerjakan diagnosis penyakit kulit melalui pengenalan gambar. - person Ray Lionfang; 10.11.2013
comment
Saya sarankan sekecil mungkin. Jumlah yang lebih besar tidak hanya berarti komputasi yang lebih lama tetapi juga kemungkinan terjadinya overfitting. Mulailah dengan yang kecil dan tingkatkan ukurannya jika perlu - bukan sebaliknya. - person lejlot; 11.11.2013
comment
Saya belum pernah menggunakan Encog sebelumnya - tapi itu bukan gambaran lengkapnya. Sementara jumlah yang besar - yaitu hanya 2,5 GigaFLOPs. Core 2 Q6600 (tidak mewah) dapat melakukan 38 GigaFLOP per detik. Bahkan dengan asumsi penalti untuk Java lebih lambat dari C/C++ untuk throughput mentah - seharusnya dimungkinkan untuk menyelesaikan 1 epoch dalam waktu yang wajar. - person Raff.Edward; 11.11.2013
comment
sekarang saya mendapatkan tingkat iterasi yang lebih baik... sekitar 3 iterasi selama lima menit... Saya ingin bertanya sekarang apakah boleh menggunakan nilai rgb int tunggal mentah untuk neuron input pengenalan gambar sehingga saya dapat menghemat ruang memori atau haruskah saya menggunakan nilai merah, hijau dan biru sebagai tiga neuron terpisah? - person Ray Lionfang; 11.11.2013
comment
Anda sebaiknya menerapkannya secara terpisah atau mempertimbangkan untuk menggunakan nilai skala abu-abu. Ingat juga tentang normalisasi/penskalaan data yang benar. - person lejlot; 11.11.2013
comment
+1 untuk FANN. Itu baru bagi saya, dan sepertinya saya bisa menggunakan fitur-fiturnya. Terima kasih! - person KathyA.; 26.09.2014