/ / Dodawanie podsumowań Tensorboard z operacji graficznych generowanych wewnątrz wywołań funkcji mapy zestawu danych () - python, tensorflow, tensorboard, tensorflow-serving, tensorflow-datasets

Dodawanie podsumowań Tensorboard z wykresów op generowanych w wywołaniach funkcji Dataset map () - python, tensorflow, tensorboard, tensorflow-serving, tensorflow-datasets

Znalazłem zestaw danych.Funkcja map () całkiem niezła do konfigurowania potoków do wstępnego przetwarzania danych obrazu / dźwięku przed wprowadzeniem do sieci w celu szkolenia, ale jednym z moich problemów jest dostęp do nieprzetworzonych danych przed przetwarzaniem wstępnym, aby wysłać je na tablicę wyników jako podsumowanie.

Na przykład powiedzmy, że mam funkcję, która ładuje dane audio, tworzy ramkę, tworzy spektrogram i zwraca to.

import tensorflow as tf

def load_audio_examples(label, path):
# loads audio, converts to spectorgram
pcm = ...  # this is what I"d like to put into tf.summmary.audio() !
# creates one-hot encoded labels, etc
return labels, examples

# create dataset
training = tf.data.Dataset.from_tensor_slices((
tf.constant(labels),
tf.constant(paths)
))

training = training.map(load_audio_examples, num_parallel_calls=4)

# create ops for training
train_step = # ...
accuracy = # ...

# create iterator
iterator = training.repeat().make_one_shot_iterator()
next_element = iterator.get_next()

# ready session
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
train_writer = # ...

# iterator
test_iterator = testing.make_one_shot_iterator()
test_next_element = iterator.get_next()

# train loop
for i in range(100):
batch_ys, batch_xs, path = sess.run(next_element)
summary, train_acc, _ = sess.run([summaries, accuracy, train_step],
feed_dict={x: batch_xs, y: batch_ys})
train_writer.add_summary(summary, i)

Wygląda na to, że nie staje się to częścią wykresu wykreślonego w zakładce „Wykres” tablicy tensorboard (patrz zrzut ekranu poniżej).

tesnrofboard

Jak widać, jest to po prostu X (wynik funkcji mapowania wstępnego przetwarzania ()).

  1. Jak miałbym to lepiej ustrukturyzować, aby uzyskać surowy dźwięk w pliku tf.summary.audio()? W tej chwili rzeczy wewnątrz mapy () nie są dostępne jako Tensory w mojej pętli treningowej.
  2. Ponadto, dlaczego mój wykres się nie wyświetlaTensorboard? Martwi mnie, że nie będę w stanie wyeksportować mojego modelu ani użyć Tensorflow Serving, aby wprowadzić mój model do produkcji, ponieważ używam nowego interfejsu API zestawu danych - może powinienem wrócić do robienia rzeczy ręcznie? (z kolejkami itp.).

Odpowiedzi:

5 dla odpowiedzi № 1

Wydaje mi się, że korzystanie z interfejsu API zestawu danych nie ma większego sensu. W rzeczywistości masz 2 rozłączone podsgrafy. Jeden do odczytu danych, a drugi do przeprowadzenia etapu szkolenia.

batch_ys, batch_xs, path = sess.run(next_element)
summary, train_acc, _ = sess.run([summaries, accuracy, train_step],
feed_dict={x: batch_xs, y: batch_ys})

Pierwszy wiersz powyższego kodu uruchamia sesję i pobiera z niej elementy danych. Przesyła dane z zaplecza Tensorflow do Pythona.

Następny wiersz podaje dane za pomocą feed_dict i to jest uważany za nieefektywny. Tym razem TensorFlow przesyła dane z Pythona do środowiska wykonawczego.

Ma to następujące konsekwencje:

  1. Twój wykres wygląda na odłączony
  2. TensorFlow marnuje czas na niepotrzebne przesyłanie danych do iz Pythona.

Aby mieć pojedynczy wykres (bez odłączenia)podgrupy) musisz zbudować swój model na tensorach zwróconych przez interfejs API zestawu danych. Należy pamiętać, że można przełączać między zestawami danych szkoleniowych i testowych bez ręcznego pobierania partii (patrz Przewodnik po zestawie danych)

Jeśli mówić o podsumowaniu zdefiniowanym w map_fn Wierzę, że możesz pobrać podsumowanie SUMMARIES kolekcja (domyślna kolekcja podsumowań). Podczas dodawania operacji podsumowania możesz także przekazać własną nazwę kolekcji.