Menulis Saluran Input yang Efisien Menggunakan Data API TensorFlow – Menuju AI – Teknologi, Sains, dan Teknik Terbaik

Penulis: Jonathan Quijas

Pembelajaran mesin

Pendahuluan Singkat tentang Pemrosesan Set Data untuk Rekayasa Pembelajaran Mesin dalam Skala Besar

Foto oleh Claudio Testa di Unsplash

Posting ini sangat terinspirasi oleh latihan bab 12 dalam Pembelajaran Mesin Hands-On dengan Scikit-Learn, Keras & Tensorflow. Saya sangat merekomendasikan buku ini.

Pernyataan masalah

Bekerja dengan kumpulan data yang sangat besar adalah skenario umum dalam Rekayasa Pembelajaran Mesin. Biasanya, kumpulan data ini akan terlalu besar untuk dimasukkan ke dalam memori. Ini berarti data harus diambil dari disk dengan cepat selama pelatihan.

Akses disk beberapa kali lipat lebih lambat daripada akses memori, jadi pengambilan yang efisien adalah prioritas tinggi.

Untungnya, tf.data API TensorFlow menyediakan antarmuka yang sederhana dan intuitif untuk memuat, melakukan praproses, dan bahkan mengambil data terlebih dahulu.

Dalam posting ini, kita akan belajar cara membuat pipeline input yang sederhana namun kuat untuk memuat dan memproses set data sebelumnya secara efisien menggunakan API tf.data.

Pipeline Input menggunakan TensorFlow Data API

Penafian: TensorFlow menyediakan dokumentasi yang sangat baik untuk modul dan API-nya. Untuk lebih jelasnya, lihat situs resmi.

Aktor utama dalam tutorial ini adalah tf.data.Dataset. Tujuannya adalah untuk:

Buat tf.data.Dataset dari file data menggunakan metode statis tf.data.Dataset.list_files () Menerapkan urutan fungsi pada instance tf.data.Dataset

Membuat Set Data

The tf.data.Dataset.list_files () mengembalikan tf.data.Dataset dari daftar jalur file yang disediakan atau pola file (ekspresi reguler).

Kami akan menganggap kumpulan data kami adalah kumpulan file terpisah yang disimpan sebagai berikut:

datadir /
file_001.csv
file_002.csv

file_n.csv

Untuk membuat tf.data.Dataset jalur file:

filepath_dataset = tf.data.Dataset.list_files (‘./ datadir / file _ *. csv’)

Jalur file adalah langkah pertama yang baik, tetapi kami membutuhkan data aktual yang ditemukan di dalam file untuk dipelajari. Kami akan merangkai urutan metode, mulai dari jalur file, dan berakhir pada data aktual untuk digunakan selama pelatihan.

Mengubah data

Beberapa metode tf.data.Dataset yang paling umum dan berguna adalah: interleave (), shuffle (), batch (), dan prefetch (). Kami akan membahas masing-masing secara singkat di artikel ini.

Menjalin

Selama pelatihan model, mungkin bermanfaat untuk mengacak instance untuk menghindari mempelajari pola palsu karena pengurutan data pelatihan (misalnya, file yang diurutkan menurut abjad). Fungsi interleave () menyediakan cara sederhana untuk mengaktifkan pengocokan kasar set data yang terdiri dari file terpisah yang lebih kecil.

Butir kasar dalam konteks ini berarti di tingkat file. Pengocokan yang lebih halus akan terjadi pada tingkat baris .csv, yang akan kita lihat sebentar lagi.

https://medium.com/media/9f638ab063af96836ccafda2dc5ef82a/href

Dengan menggunakan fungsi lambda, kami menghasilkan tf.data.experimental.CsvDataset dari setiap jalur file individual.

Variabel csv_dataset sekarang menjadi referensi ke tf.data.Dataset yang terdiri dari kumpulan set data CsvDataset. Metode interleave () menggabungkan (atau interleave) bersama semua set data CsvDataset menjadi satu (dalam hal ini, csv_dataset).

Menyetel num_parallel_calls ke tf.data.experimental.AUTOTUNE memberi tahu TensorFlow untuk secara otomatis memilih jumlah utas terbaik untuk membaca file.csv. Ini meningkatkan efisiensi jalur pipa, selama mesin memiliki prosesor multi inti dengan dukungan multithread (kebanyakan mesin memilikinya saat ini).

Acak

Seperti yang disebutkan sebelumnya, mengacak data mencegah mempelajari pola palsu dalam data pelatihan. Ini juga meningkatkan konvergensi metode berbasis gradien, seperti melatih jaringan neural menggunakan Gradient Descent. Untuk mengacak data, gunakan metode shuffle ():

https://medium.com/media/ca55d07458bcd065a43ac2ccf7f14121/href

Nilai shuffle_buffer_size menentukan ukuran buffer untuk menyimpan data dari set data asli (tidak diacak). Nilai ini harus diatur sesuai dengan ukuran dataset dan jumlah memori yang tersedia. Lihat dokumentasi shuffle () untuk lebih jelasnya.

CATATAN: Pengocokan tidak diperlukan selama validasi atau pengujian. Faktanya, beberapa skenario memerlukan prediksi pada set pengujian agar terjadi dalam urutan yang sama seperti data pengujian yang disediakan (misalnya, kompetisi Kaggle). Ingatlah hal ini dan nonaktifkan pengacakan jika perlu!

Batch

Teknik preprocessing data umum lainnya adalah mengumpulkan data, memproses potongan kecil pada satu waktu, bukan seluruh dataset sekaligus. Hal ini memungkinkan untuk memproses dan melatih pada kumpulan data yang sangat besar, karena tidak perlu disimpan dalam memori sekaligus.

https://medium.com/media/cb3de1967ce7ad4bb6682741f28efba9/href

Ambil dulu

Pipeline deep learning yang efisien memanfaatkan komputasi GPU untuk pelatihan model, sedangkan pengambilan dan praproses data terjadi pada modul komputasi terpisah seperti CPU.

Jika GPU harus menunggu hingga CPU selesai memuat dan melakukan praproses, maka GPU akan diam, membuang siklus berharga tanpa melakukan apa pun. Mengambil data sebelumnya membantu mencegah hal ini. Ini sangat meningkatkan efisiensi, karena memaksimalkan pemanfaatan GPU (tidak ada siklus yang terbuang atau tidak aktif).

Menentukan untuk mengambil data lebih dulu semudah memanggil metode prefetch ():

https://medium.com/media/b55ec0392cbad8da742ef9d648faa431/href

Menyatukan Semuanya

Menggabungkan semua metode menjadi suatu fungsi, pipeline terakhir dapat terlihat seperti ini:

https://medium.com/media/c43074ffbe8bd9b89a26a7d013692cb7/href

Kesimpulan

Dalam artikel ini, kita belajar membuat pipeline input yang sederhana namun efisien menggunakan API tf.data. Kami membahas cara:

Tangani kumpulan data yang sangat besar yang dipecah menjadi beberapa file terpisah menggunakan metode statis tf.data.Dataset.list_files () Mengaktifkan paralelisme dengan memanfaatkan beberapa utas eksekusi Meningkatkan konvergensi menggunakan pengocokan data berbutir kasar dengan metode kumpulan data interleave () Tingkatkan konvergensi menggunakan fine- pengocokan data berbutir menggunakan metode shuffle () Maksimalkan pemanfaatan GPU menggunakan metode prefetch () Gabungkan semua konsep ini ke dalam satu fungsi yang menghasilkan kumpulan data yang siap untuk konsumsi model

Sumber

Menulis Saluran Input yang Efisien Menggunakan API Data TensorFlow awalnya diterbitkan di Towards AI on Medium, tempat orang-orang melanjutkan percakapan dengan menyorot dan menanggapi artikel ini.

Diterbitkan melalui Towards AI