将张量值分配给 tensorflow v1.13 中的占位符

Assign tensor value to placeholder in tensorflow v1.13

在我的张量流模型中,一个网络的输出是一个张量。我需要将该值作为输入提供给另一个预训练网络。我正在按如下方式加载预训练网络

input_b_ph = tf.placeholder(shape=(), dtype=float.32, name='input_b_ph')
sess1 = tf.Session()
saver = tf.train.import_meta_graph(model_path.as_posix() + '.meta', input_map={'input/Identity:0': input_b_ph})
graph = tf.get_default_graph()
saver.restore(sess1, model_path.as_posix())
output_b = graph.get_tensor_by_name('output/Identity:0')

我需要向 feature_input 提供一个张量。我怎样才能做到这一点?

编辑 1:添加端到端详细信息:
我在 tensorflow 中定义了一个网络 A,它接受输入 input_a 并产生输出 output_a。我需要将其提供给 ResNet50 预训练模型。为此,我使用了 tf.keras

中的 ResNet50
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input

resnet_model = ResNet50(include_top=False, pooling='avg')
preprocessed_input = preprocess_input(tf.cast(output_a, tf.float32))
output_resnet = resnet_model([preprocessed_input])

ResNet 的输出是 output_resnet。我需要将其提供给另一个预训练网络,例如网络 BB 实际上是用 Keras 写的。我将其修改为使用 tf.keras。然后我将训练好的模型保存如下:

import tensorflow as tf
from tensorflow import keras
curr_sess = keras.backend.get_session()
with tf.name_scope('input'):
    _ = tf.identity(quality_net.model.input)
with tf.name_scope('output'):
    __ = tf.identity(quality_net.model.output)
saver = tf.train.Saver()
saver.save(curr_sess, output_filepath.as_posix())

我可以访问此网络 B 并尝试以 h5 格式保存模型,但它给出了模型是线程锁的错误。在互联网上搜索时,我知道当网络中有 Lambda 层时会出现此错误。所以,我求助于以 tensorflow 格式保存模型——3 个文件:元数据、权重和索引。 (任何使用 h5 格式的解决方案也是可以接受的)。

这里有一个警告。网络 B 的结构可以不断变化,它来自不同的项目。所以我不能硬编码 B 的架构。我必须从保存的模型中加载它。我的问题是如何恢复这个预训练模型并将 output_resnet 作为输入传递给网络 B。网络 Boutput_b 的输出是训练我的原始网络 A 的损失函数。目前我可以按如下方式恢复网络 B:

input_b_ph = tf.placeholder(shape=(), dtype=float.32, name='input_b_ph')
sess1 = tf.Session()
saver = tf.train.import_meta_graph(model_path.as_posix() + '.meta', input_map={'input/Identity:0': input_b_ph})
graph = tf.get_default_graph()
saver.restore(sess1, model_path.as_posix())
output_b = graph.get_tensor_by_name('output/Identity:0')

我从 resnet 输出 output_resnet,这是一个张量。我需要一种方法将其设置为 input_b_ph。我怎样才能做到这一点?任何替代解决方案也是可以接受的

为了社区的利益,在此(答案)部分提及答案(尽管它出现在评论部分)。

在这种情况下不需要

Placeholder。只需将 output_resnet 传递给 input_map 即可解决问题。

替换代码,

saver = tf.train.import_meta_graph(model_path.as_posix() + '.meta', 
                                        input_map={'input/Identity:0': input_b_ph})

saver = tf.train.import_meta_graph(model_path.as_posix() + '.meta', 
                                      input_map={'input/Identity:0': output_resnet})

已解决问题。