Замена feed_dict в TF2.0 для тензорных входов в тензорные функции - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть обратный вызов Keras, который извлекает значения из определенных слоев Keras, например:

def run(self, fetches, next_batch):
    """Run fetches using the validation data passed in during initialization."""
    input_data, target_data = self.sess.run(next_batch)
    feed_dict = {self.model.inputs[0]: input_data,
                 self.model._targets[0]: target_data}
    result = self.sess.run(fetches=fetches, feed_dict=feed_dict)
    return result

next_batch был вызовом Dataset.make_one_shot_iterator.get_next () в tf1. Я заменил его следующим (iter (ds)). Эта часть работает нормально.

Однако я не могу понять, как переписать вызов sess.run (). Я хочу получить выходные данные от тензоров 'fetches', но их входные значения выше других тензоров в модели. Я знаю, какие тензоры являются моими входными тензорами, но как мне передать в них данные и получить желаемые результаты от тензоров на более поздних уровнях?

Я прочитал документацию по преобразованию по этому вопросу. но это действительно кратко и бесполезно. Мне не удалось найти гораздо больше информации о стековом потоке.

1 Ответ

1 голос
/ 04 февраля 2020

Выход из указанного слоя c может быть получен из модели следующим образом:


#get the output from the layer1
out1 = model.get_layer(layer1_name).output

#get the output from the layer2 
out2 = model.get_layer(layer2_name).output

#a new model with outputs of the layers
MyModel = Model(inputs=model.input,outputs=[out1,out2])

Теперь вы можете передавать значения как

#call the model
mymodel = MyModel()

#pass your inputs
outputs = mymodel(inputs)

Запомните outputs является массивом обоих выходов, которые можно получить с помощью

output1 = outputs[0]
output2 = outputs[1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...