我有一个Keras回调,它从特定的Keras层中获取值,如下所示:
def run(self, fetches, next_batch): """使用初始化时传入的验证数据运行fetches。""" 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
在tf1中是一个Dataset.make_one_shot_iterator.get_next()调用。我已经用next(iter(ds))替换了它。这部分工作正常。
然而,我无法弄清楚如何重写sess.run()调用。我想从’fetches’张量中获取输出,但它们的输入是模型中更高层的其他张量。我知道哪些张量是我的输入张量,但我该如何将数据传递给它们,并从后续层的张量中获取我想要的输出呢?
我阅读了关于这个主题的转换文档,但它实在是太简略且无助。我在stackoverflow上也没能找到更多信息。
回答:
可以从模型中以这种方式获取特定层的输出
#获取layer1的输出out1 = model.get_layer(layer1_name).output#获取layer2的输出out2 = model.get_layer(layer2_name).output#创建一个新的模型,其输出为这些层的输出MyModel = Model(inputs=model.input,outputs=[out1,out2])
现在您可以这样传递值
#调用模型mymodel = MyModel()#传递您的输入outputs = mymodel(inputs)
请记住,outputs
是包含两个输出的数组,可以通过以下方式获取
output1 = outputs[0]output2 = outputs[1]