средство записи тензорного потока не работает во время выполнения графа - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь адаптировать свой код, чтобы он мог запускать режим выполнения графа. Однако при указании функции, отвечающей за запись в журнал тензорной доски, с помощью @tf.function код выполняется намного быстрее (и это хорошо), но ничего не записывает в файл событий. Я посмотрел на tenorflow do c, где они предлагают кодировать так:

def my_func(step):
  with writer.as_default():
    # other model code would go here
    tf.summary.scalar("my_metric", 0.5, step=step)

for step in tf.range(100, dtype=tf.int64):
  my_func(step)
  writer.flush()

Определенным образом, они предлагают быть уверенными в том, что средство записи резюме существует вне функции, выполняемой в графическом режиме. Насколько я понимаю из здесь . Мой код выглядит следующим образом:

    @tf.function(experimental_relax_shapes=True)
    def train(self,TargetNet,BaselineNet,iteration):

        if len(self.experience['s']) < self.min_experiences:
            return 0

        ids = np.random.randint(low=0, high=len(self.experience['s']), size=self.batch_size)
        states = np.asarray([self.experience['s'][i] for i in ids])
        actions = np.asarray([self.experience['a'][i] for i in ids])
        rewards = np.asarray([self.experience['r'][i] for i in ids])
        states_next = np.asarray([self.experience['s2'][i] for i in ids])

        with tf.GradientTape() as tape:
            # some model operations here            
            with self.summary_writer.as_default():
                # store scalars or histograms here

Дело в том, что train является методом класса, и я передаю summary_writer в качестве атрибута этого класса. Я не очень понимаю, в чем проблема и что отличается от того, что tf do c предлагает в качестве решения. Я все еще создаю писателя вне функции tf.function (). Есть ли обходной путь для этого? Я правильно понимаю вопрос?

...