TensorBoard adalah rangkaian aplikasi web untuk memeriksa dan memahami proses dan grafik TensorFlow Anda.
README ini memberikan ringkasan konsep utama di TensorBoard, serta cara menafsirkan visualisasi yang disediakan TensorBoard. Untuk contoh mendalam penggunaan TensorBoard, lihat tutorial: TensorBoard: Memulai. Dokumentasi tentang cara menggunakan TensorBoard untuk bekerja dengan gambar, grafik, parameter hiper, dan lainnya ditautkan dari sana, bersama dengan panduan tutorial di Colab.
TensorBoard dirancang untuk berjalan sepenuhnya offline, tanpa memerlukan akses apa pun ke Internet. Misalnya, ini mungkin terjadi pada mesin lokal Anda, di belakang firewall perusahaan, atau di pusat data.
Sebelum menjalankan TensorBoard, pastikan Anda telah membuat data ringkasan di direktori log dengan membuat penulis ringkasan:
# sess.graph contains the graph definition; that enables the Graph Visualizer.
file_writer = tf . summary . FileWriter ( '/path/to/logs' , sess . graph )
Untuk detail selengkapnya, lihat tutorial TensorBoard. Setelah Anda memiliki file peristiwa, jalankan TensorBoard dan sediakan direktori log. Jika Anda menggunakan paket TensorFlow yang telah dikompilasi (misalnya, Anda menginstal melalui pip), jalankan:
tensorboard --logdir path/to/logs
Atau, jika Anda membangun dari sumber:
bazel build tensorboard:tensorboard
./bazel-bin/tensorboard/tensorboard --logdir path/to/logs
# or even more succinctly
bazel run tensorboard -- --logdir path/to/logs
Ini akan mencetak bahwa TensorBoard telah dimulai. Selanjutnya, sambungkan ke http://localhost:6006.
TensorBoard memerlukan logdir
untuk membaca log. Untuk informasi tentang cara mengonfigurasi TensorBoard, jalankan tensorboard --help
.
TensorBoard dapat digunakan di Google Chrome atau Firefox. Browser lain mungkin berfungsi, tetapi mungkin ada bug atau masalah kinerja.
Langkah pertama dalam menggunakan TensorBoard adalah memperoleh data dari proses TensorFlow Anda. Untuk ini, Anda memerlukan operasi ringkasan. Operasi ringkasan adalah operasi, sama seperti tf.matmul
dan tf.nn.relu
, yang berarti operasi tersebut mengambil tensor, menghasilkan tensor, dan dievaluasi dari dalam grafik TensorFlow. Namun, operasi ringkasan memiliki keunikan: Tensor yang mereka hasilkan berisi protobuf berseri, yang ditulis ke disk dan dikirim ke TensorBoard. Untuk memvisualisasikan data ringkasan di TensorBoard, Anda harus mengevaluasi operasi ringkasan, mengambil hasilnya, lalu menulis hasil tersebut ke disk menggunakan ringkasan.FileWriter. Penjelasan lengkap beserta contoh ada di tutorial.
Operasi ringkasan yang didukung meliputi:
tf.summary.scalar
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
Saat Anda membuat ringkasan, Anda juga akan memberinya tag
. Tag pada dasarnya adalah nama untuk data yang direkam oleh operasi tersebut, dan akan digunakan untuk mengatur data di frontend. Dasbor skalar dan histogram mengatur data berdasarkan tag, dan mengelompokkan tag ke dalam folder menurut direktori/suka/hierarki. Jika Anda memiliki banyak tag, sebaiknya kelompokkan dengan garis miring.
summary.FileWriters
mengambil data ringkasan dari TensorFlow, lalu menuliskannya ke direktori tertentu, yang dikenal sebagai logdir
. Secara khusus, data ditulis ke dump rekaman khusus tambahan yang akan memiliki "tfevents" di nama filenya. TensorBoard membaca data dari direktori lengkap, dan mengaturnya ke dalam riwayat eksekusi TensorFlow tunggal.
Mengapa ia membaca seluruh direktori, bukan satu file? Anda mungkin telah menggunakan supervisor.py untuk menjalankan model Anda, dalam hal ini jika TensorFlow mengalami error, supervisor akan memulai ulang model tersebut dari pos pemeriksaan. Saat dimulai ulang, TensorBoard akan mulai menulis ke file peristiwa baru, dan TensorBoard akan menyatukan berbagai file peristiwa untuk menghasilkan riwayat yang konsisten tentang apa yang terjadi.
Anda mungkin ingin membandingkan beberapa eksekusi model Anda secara visual; misalnya, Anda telah mengubah hyperparameter dan ingin melihat apakah hyperparameter tersebut konvergen lebih cepat. TensorBoard mengaktifkannya melalui "proses" yang berbeda. Saat TensorBoard meneruskan logdir
saat startup, TensorBoard akan menelusuri pohon direktori yang berakar pada logdir
secara rekursif untuk mencari subdirektori yang berisi data tfevents. Setiap kali ia menemukan subdirektori seperti itu, ia memuatnya sebagai run
baru, dan frontend akan mengatur datanya sesuai dengan itu.
Misalnya, berikut adalah direktori log TensorBoard yang terorganisir dengan baik, dengan dua proses, "run1" dan "run2".
/some/path/mnist_experiments/
/some/path/mnist_experiments/run1/
/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name
/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name
/some/path/mnist_experiments/run2/
/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name
/tensorboard --logdir /some/path/mnist_experiments
Anda juga dapat meneruskan daftar direktori log yang dipisahkan koma, dan TensorBoard akan mengawasi setiap direktori. Anda juga dapat menetapkan nama ke masing-masing direktori log dengan memberi titik dua di antara nama dan jalur, seperti pada
tensorboard --logdir_spec name1:/path/to/logs/1,name2:/path/to/logs/2
Tanda ini ( --logdir_spec
) tidak disarankan dan biasanya dapat dihindari . TensorBoard menjalankan direktori log secara rekursif; untuk kontrol yang lebih halus, lebih suka menggunakan pohon symlink. Beberapa fitur mungkin tidak berfungsi saat menggunakan --logdir_spec
alih-alih --logdir
.
Dasbor Skalar TensorBoard memvisualisasikan statistik skalar yang bervariasi dari waktu ke waktu; misalnya, Anda mungkin ingin melacak kerugian model atau kecepatan pembelajaran. Seperti yang dijelaskan dalam Konsep Utama , Anda dapat membandingkan beberapa proses, dan data diatur berdasarkan tag. Bagan garis memiliki interaksi berikut:
Mengklik ikon biru kecil di sudut kiri bawah setiap bagan akan memperluas bagan
Menyeret wilayah persegi panjang pada grafik akan memperbesar
Mengklik dua kali pada grafik akan memperkecil
Mengarahkan mouse ke atas bagan akan menghasilkan garis bidik, dengan nilai data dicatat dalam pemilih proses di sebelah kiri.
Selain itu, Anda dapat membuat folder baru untuk mengatur tag dengan menulis ekspresi reguler di kotak di kiri atas dasbor.
Dasbor Histogram menampilkan bagaimana distribusi statistik Tensor bervariasi dari waktu ke waktu. Ini memvisualisasikan data yang direkam melalui tf.summary.histogram
. Setiap bagan memperlihatkan "irisan" data sementara, dengan setiap irisan merupakan histogram tensor pada langkah tertentu. Ini diatur dengan langkah waktu terlama di belakang, dan langkah waktu terbaru di depan. Dengan mengubah Mode Histogram dari "offset" menjadi "overlay", perspektif akan diputar sehingga setiap irisan histogram ditampilkan sebagai garis dan ditumpangkan satu sama lain.
Dasbor Distribusi adalah cara lain untuk memvisualisasikan data histogram dari tf.summary.histogram
. Ini menunjukkan beberapa statistik tingkat tinggi pada suatu distribusi. Setiap garis pada bagan mewakili persentil dalam distribusi data: misalnya, garis terbawah menunjukkan perubahan nilai minimum seiring waktu, dan garis di tengah menunjukkan perubahan median. Dibaca dari atas ke bawah, garis-garis tersebut mempunyai arti sebagai berikut: [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]
Persentil ini juga dapat dilihat sebagai batas deviasi standar pada distribusi normal: [maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]
sehingga daerah berwarna yang dibaca dari dalam ke luar mempunyai lebar masing-masing [σ, 2σ, 3σ]
.
Dasbor Gambar dapat menampilkan png yang disimpan melalui tf.summary.image
. Dasbor diatur sehingga setiap baris berhubungan dengan tag yang berbeda, dan setiap kolom berhubungan dengan proses. Karena dasbor gambar mendukung png arbitrer, Anda dapat menggunakannya untuk menyematkan visualisasi khusus (misalnya matplotlib scatterplots) ke dalam TensorBoard. Dasbor ini selalu menampilkan gambar terbaru untuk setiap tag.
Dasbor Audio dapat menyematkan widget audio yang dapat diputar untuk audio yang disimpan melalui tf.summary.audio
. Dasbor diatur sehingga setiap baris berhubungan dengan tag yang berbeda, dan setiap kolom berhubungan dengan proses. Dashboard ini selalu menyematkan audio terbaru untuk setiap tag.
Graph Explorer dapat memvisualisasikan grafik TensorBoard, sehingga memungkinkan pemeriksaan model TensorFlow. Untuk memanfaatkan visualisator grafik dengan sebaik-baiknya, Anda harus menggunakan cakupan nama untuk mengelompokkan operasi dalam grafik secara hierarki - jika tidak, grafik mungkin sulit diuraikan. Untuk informasi selengkapnya, termasuk contoh, lihat tutorial memeriksa grafik TensorFlow.
Proyektor Penyematan memungkinkan Anda memvisualisasikan data berdimensi tinggi; misalnya, Anda dapat melihat data masukan setelah dimasukkan ke dalam ruang berdimensi tinggi oleh model Anda. Proyektor penyematan membaca data dari file pos pemeriksaan model Anda, dan dapat dikonfigurasi dengan metadata tambahan, seperti file kosakata atau gambar sprite. Untuk lebih jelasnya, lihat tutorial penyematan proyektor.
Dasbor Teks menampilkan cuplikan teks yang disimpan melalui tf.summary.text
. Fitur penurunan harga termasuk hyperlink, daftar, dan tabel semuanya didukung.
Dasbor Time Series menampilkan antarmuka terpadu yang berisi semua Skalar, Histogram, dan Gambar yang disimpan melalui tf.summary.scalar
, tf.summary.image
, atau tf.summary.histogram
. Ini memungkinkan melihat diagram garis 'akurasi' Anda berdampingan dengan histogram aktivasi dan gambar contoh pelatihan, misalnya.
Fitur-fiturnya meliputi:
Warna proses khusus: klik pada lingkaran berwarna di pemilih proses untuk mengubah warna proses.
Kartu yang dipasangi pin: klik ikon 'sematkan' pada kartu mana pun untuk menambahkannya ke bagian yang dipasangi pin di bagian atas untuk perbandingan cepat.
Pengaturan: panel kanan menawarkan pengaturan untuk grafik dan visualisasi lainnya. Setelan penting akan tetap ada di seluruh sesi TensorBoard, jika dihosting di URL asal yang sama.
Pelengkapan otomatis dalam filter tag: cari bagan tertentu dengan lebih mudah.
Pertama, periksa apakah direktori yang diteruskan ke --logdir
sudah benar. Anda juga dapat memverifikasi ini dengan menavigasi ke dasbor Scalars (di bawah menu "Tidak Aktif") dan mencari jalur direktori log di bagian bawah sidebar kiri.
Jika Anda memuat dari jalur yang benar, pastikan file peristiwa ada. TensorBoard akan menjalankan logdirnya secara rekursif, tidak masalah jika datanya disarangkan di bawah subdirektori. Pastikan yang berikut ini menunjukkan setidaknya satu hasil:
find DIRECTORY_PATH | grep tfevents
Anda juga dapat memeriksa apakah file peristiwa benar-benar memiliki data dengan menjalankan tensorboard dalam mode inspeksi untuk memeriksa konten file peristiwa Anda.
tensorboard --inspect --logdir DIRECTORY_PATH
Output untuk file peristiwa yang terkait dengan TensorBoard kosong terkadang masih menampilkan beberapa langkah, mewakili beberapa peristiwa awal yang tidak ditampilkan oleh TensorBoard (misalnya, saat menggunakan callback Keras TensorBoard):
tensor
first_step 0
last_step 2
max_step 2
min_step 0
num_steps 2
outoforder_steps [(2, 0), (2, 0), (2, 0)]
Sebaliknya, keluaran untuk file peristiwa dengan lebih banyak data mungkin terlihat seperti ini:
tensor
first_step 0
last_step 55
max_step 250
min_step 0
num_steps 60
outoforder_steps [(2, 0), (2, 0), (2, 0), (2, 0), (50, 9), (100, 19), (150, 29), (200, 39), (250, 49)]
Pembaruan: Setelah rilis 2.3.0, TensorBoard tidak lagi memuat ulang secara otomatis setiap 30 detik. Untuk mengaktifkan kembali perilaku ini, buka pengaturan dengan mengklik ikon roda gigi di kanan atas antarmuka web TensorBoard, dan aktifkan "Muat ulang data".
Pembaruan: opsi eksperimental
--reload_multifile=true
sekarang dapat digunakan untuk melakukan polling semua file "aktif" dalam direktori untuk data baru, bukan yang terbaru seperti dijelaskan di bawah. Sebuah file "aktif" asalkan menerima data baru dalam--reload_multifile_inactive_secs
detik yang lalu, defaultnya adalah 86400.
Masalah ini biasanya muncul karena cara TensorBoard melakukan iterasi melalui file tfevents
: masalah ini berkembang melalui file peristiwa dalam urutan stempel waktu, dan hanya membaca satu file dalam satu waktu. Misalkan kita memiliki file dengan stempel waktu a
dan b
, di mana a . Setelah TensorBoard membaca semua kejadian di
a
, TensorBoard tidak akan pernah kembali ke sana, karena TensorBoard mengasumsikan ada kejadian baru yang sedang ditulis di file yang lebih baru. Hal ini dapat menyebabkan masalah jika, misalnya, Anda memiliki dua FileWriters
yang menulis ke direktori yang sama secara bersamaan. Jika Anda memiliki beberapa penulis ringkasan, masing-masing penulis harus menulis ke direktori terpisah.
Pembaruan: opsi eksperimental
--reload_multifile=true
sekarang dapat digunakan untuk melakukan polling semua file "aktif" dalam direktori untuk data baru, didefinisikan sebagai file apa pun yang menerima data baru dalam--reload_multifile_inactive_secs
detik yang lalu, dengan default 86400.
Tidak. TensorBoard mengharapkan hanya satu file peristiwa yang akan ditulis dalam satu waktu, dan beberapa penulis ringkasan berarti beberapa file peristiwa. Jika Anda menjalankan instance TensorFlow terdistribusi, sebaiknya Anda menunjuk satu pekerja sebagai "pemimpin" yang bertanggung jawab atas semua pemrosesan ringkasan. Lihat supervisor.py sebagai contoh.
Jika Anda melihat data yang sepertinya berjalan mundur sepanjang waktu dan tumpang tindih dengan dirinya sendiri, ada beberapa kemungkinan penjelasannya.
Anda mungkin memiliki beberapa eksekusi TensorFlow yang semuanya ditulis ke direktori log yang sama. Harap jalankan setiap TensorFlow dengan menulis ke logdirnya sendiri.
Pembaruan: opsi eksperimental
--reload_multifile=true
sekarang dapat digunakan untuk melakukan polling semua file "aktif" dalam direktori untuk data baru, didefinisikan sebagai file apa pun yang menerima data baru dalam--reload_multifile_inactive_secs
detik yang lalu, dengan default 86400.
Anda mungkin memiliki bug dalam kode Anda di mana variabel global_step (diteruskan ke FileWriter.add_summary
) tidak dikelola dengan benar.
Mungkin tugas TensorFlow Anda mengalami error dan dimulai ulang dari pos pemeriksaan sebelumnya. Lihat Cara menangani restart TensorFlow di bawah.
Sebagai solusinya, coba ubah tampilan sumbu x di TensorBoard dari steps
menjadi wall_time
. Hal ini sering kali akan menyelesaikan masalah.
TensorFlow dirancang dengan mekanisme pemulihan yang baik jika tugas mogok atau terhenti: TensorFlow dapat menulis file pos pemeriksaan model secara berkala, yang memungkinkan Anda memulai ulang TensorFlow tanpa kehilangan semua kemajuan pelatihan Anda.
Namun, hal ini dapat memperumit TensorBoard; bayangkan TensorFlow menulis pos pemeriksaan pada langkah a
, lalu terus berjalan hingga langkah b
, lalu error dan memulai ulang pada stempel waktu a
. Semua kejadian yang ditulis antara a
dan b
menjadi "yatim piatu" oleh kejadian restart dan harus dihapus.
Untuk memfasilitasi hal ini, kami memiliki pesan SessionLog
di tensorflow/core/util/event.proto
yang dapat mencatat SessionStatus.START
sebagai sebuah peristiwa; seperti semua peristiwa, mungkin ada step
yang terkait dengannya. Jika TensorBoard mendeteksi peristiwa SessionStatus.START
dengan langkah a
, TensorBoard akan berasumsi bahwa setiap peristiwa dengan langkah lebih besar dari a
adalah peristiwa yatim piatu, dan TensorBoard akan membuang peristiwa tersebut. Perilaku ini mungkin dinonaktifkan dengan tanda --purge_orphaned_data false
(dalam versi setelah 0.7).
Dasbor Skalar mendukung ekspor data; Anda dapat mengeklik opsi "aktifkan tautan unduhan" di bilah sebelah kiri. Kemudian, setiap plot akan menyediakan link download data yang dikandungnya.
Jika Anda memerlukan akses ke kumpulan data lengkap, Anda dapat membaca file peristiwa yang digunakan TensorBoard dengan menggunakan metode summary_iterator
.
Ya! Anda dapat mengkloning dan mengutak-atik salah satu contoh dan membuat visualisasi Anda sendiri yang menakjubkan. Dokumentasi selengkapnya tentang sistem plugin dijelaskan dalam panduan ADDING_A_PLUGIN. Jangan ragu untuk mengajukan permintaan fitur atau pertanyaan tentang fungsionalitas plugin.
Setelah puas dengan plugin baru Anda yang inovatif, lihat bagian distribusi tentang cara mempublikasikan ke PyPI dan membagikannya dengan komunitas.
Dengan menggunakan plugin skalar khusus, Anda dapat membuat plot skalar dengan garis untuk pasangan tag proses khusus. Namun, dalam dasbor skalar asli, setiap plot skalar sesuai dengan data untuk tag tertentu dan berisi baris untuk setiap proses yang menyertakan tag tersebut.
Plot margin (yang memvisualisasikan batas bawah dan atas) dapat dibuat dengan plugin skalar khusus. Plugin skalar asli tidak mendukung visualisasi margin.
Hal ini masih belum memungkinkan. Sebagai solusinya, Anda dapat membuat plot khusus dalam kode Anda sendiri (misalnya matplotlib) dan kemudian menuliskannya ke dalam SummaryProto
( core/framework/summary.proto
) dan menambahkannya ke FileWriter
Anda. Kemudian, plot khusus Anda akan muncul di tab gambar TensorBoard.
TensorBoard menggunakan pengambilan sampel reservoir untuk menurunkan sampel data Anda agar dapat dimuat ke dalam RAM. Anda dapat mengubah jumlah elemen yang akan disimpan per tag dengan menggunakan argumen baris perintah --samples_per_plugin
(misal: --samples_per_plugin=scalars=500,images=20
). Lihat pertanyaan Stack Overflow ini untuk informasi lebih lanjut.
Versi TensorBoard sebelum TensorBoard 2.0 secara default akan ditayangkan di host 0.0.0.0
, yang dapat diakses publik. Untuk versi TensorBoard tersebut, Anda dapat menghentikan popup dengan menentukan --host localhost
saat startup.
Di TensorBoard 2.0 dan yang lebih baru, --host localhost
adalah defaultnya. Gunakan --bind_all
untuk memulihkan perilaku lama dalam melayani jaringan publik pada IPv4 dan IPv6.
tensorboard
tanpa instalasi TensorFlow?TensorBoard 1.14+ dapat dijalankan dengan kumpulan fitur yang dikurangi jika Anda belum menginstal TensorFlow. Batasan utamanya adalah pada versi 1.14, hanya plugin berikut yang didukung: skalar, skalar khusus, gambar, audio, grafik, proyektor (sebagian), distribusi, histogram, teks, kurva PR, mesh. Selain itu, tidak ada dukungan untuk direktori log di Google Cloud Storage.
Lihat PENGEMBANGAN.md.
Pertama, coba cari masalah GitHub dan Stack Overflow kami. Mungkin orang lain pernah mengalami masalah atau pertanyaan yang sama.
Pertanyaan penggunaan umum (atau masalah yang mungkin khusus untuk pengaturan lokal Anda) harus diajukan ke Stack Overflow.
Jika Anda menemukan bug di TensorBoard, harap laporkan masalah GitHub dengan informasi pendukung sebanyak yang Anda bisa berikan (misalnya melampirkan file peristiwa, termasuk keluaran tensorboard --inspect
, dll.).