Saya menjalankan beberapa eksperimen dengan jaringan saraf di TensorFlow. Catatan rilis untuk versi terbaru mengatakan DataSet selanjutnya adalah API yang direkomendasikan untuk memasok data input.

Secara umum, saat mengambil nilai numerik dari dunia luar, rentang nilai perlu dinormalisasi; jika Anda memasukkan angka mentah seperti panjang, massa, kecepatan, tanggal atau waktu, masalah yang dihasilkan akan menjadi buruk; perlu untuk memeriksa rentang nilai dinamis dan menormalkan ke rentang (0,1) atau (-1,1).

Ini tentu saja dapat dilakukan dengan Python mentah. Namun, DataSet menyediakan sejumlah fitur transformasi data dan mendorong penggunaannya, dengan teori bahwa kode yang dihasilkan tidak hanya akan lebih mudah dipelihara, tetapi juga berjalan lebih cepat. Itu menunjukkan juga harus ada fitur bawaan untuk normalisasi.

Namun, melihat dokumentasi di https://www.tensorflow.org/programmers_guide/datasets, Saya tidak melihat ada penyebutan seperti itu. Apakah saya melewatkan sesuatu? Apa cara yang disarankan untuk melakukan ini?

4
rwallace 10 November 2017, 13:00

1 menjawab

Jawaban Terbaik

Pemahaman saya tentang ide utama kumpulan data tensorflow memberi tahu saya bahwa pra-pemrosesan yang kompleks tidak dapat diterapkan secara langsung, karena tf.data.Dataset dirancang khusus untuk streaming data dalam jumlah yang sangat besar, lebih tepatnya tensor:

Dataset dapat digunakan untuk mewakili saluran input sebagai kumpulan elemen (struktur tensor bersarang) dan "rencana logis" dari transformasi yang bekerja pada elemen-elemen tersebut.

Fakta bahwa tf.data.Dataset beroperasi dengan tensor berarti bahwa memperoleh statistik tertentu atas data, seperti min atau max, memerlukan tf.Session lengkap dan setidaknya satu run melalui seluruh pipa. Contoh baris berikut:

iterator = dataset.make_one_shot_iterator()
batch_x, batch_y = iterator.get_next()

... yang dirancang untuk menyediakan batch berikutnya dengan cepat, berapa pun ukuran datasetnya, akan menghentikan dunia hingga batch pertama siap, jika dataset bertanggung jawab untuk pra-pemrosesan. Itulah sebabnya "rencana logis" hanya mencakup transformasi lokal, yang memastikan data dapat dialirkan dan, sebagai tambahan, memungkinkan untuk melakukan transformasi secara paralel.

Ini tidak berarti tidak mungkin untuk mengimplementasikan normalisasi dengan tf.data.Dataset, saya merasa itu tidak pernah dirancang untuk melakukannya dan, sebagai hasilnya, itu akan terlihat jelek (meskipun saya tidak dapat benar-benar yakin akan hal itu) . Namun, perhatikan bahwa batch-normalization sangat cocok dengan gambar ini , dan itu salah satu opsi "bagus" yang saya lihat. Pilihan lain adalah melakukan pra-pemrosesan sederhana di numpy dan memasukkan hasilnya ke tf.data.Dataset.from_tensor_slices. Ini tidak membuat pipeline jauh lebih rumit, tetapi tidak membatasi Anda untuk menggunakan tf.data.Dataset sama sekali.

2
Maxim 10 November 2017, 12:15