Я пытаюсь адаптировать свой код, чтобы он мог запускать режим выполнения графа. Однако при указании функции, отвечающей за запись в журнал тензорной доски, с помощью @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 (). Есть ли обходной путь для этого? Я правильно понимаю вопрос?