在Tensorflow图中输入层之前添加base64解码层

时间:2019-06-04 10:09:54

标签: python tensorflow graph

我想添加一层以将base64字符串解码为numpy数组,该数组是JPEG图像。该层需要在模型的原始第一层之前。我想添加一个解码层,因为这样可以减少网络流量和速度。

我由一个* .pb文件组成,我通过此文件将其加载到图形中,我尝试使用我卡在其中的Tensorflow的graph_editor模块操作该图形。

def decode(entry):
    extracted_image = tf.io.decode_jpeg(tf.io.decode_base64(entry))
    expanded = tf.expand_dims(extracted_image, axis=0)
    resized = tf.image.resize_images(expanded, size=[320, 320])
    squeezed = tf.squeeze(resized, axis=0)

    return squeezed

with tf.Session() as sess:
    print("load graph")
    with tf.gfile.FastGFile(GRAPH_PB_PATH, 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='')
        graph_nodes = [n for n in graph_def.node]


        # Get Graph
        g = tf.get_default_graph()


        input_feat = tf.placeholder(shape=(), dtype=tf.string, name="input_images_str")
        decoded_input = tf.map_fn(decode, input_feat, dtype=tf.float32)

        input_tensor = g.get_tensor_by_name("input_images:0")

        _conn = graph_editor.connect(decoded_input, input_tensor)

        print(_conn)

我还尝试将原始input_tensor与Tensorflow中的解码层连接。

        input_tensor = tf.get_default_graph().get_tensor_by_name("input_images:0")


        input_feat = tf.placeholder(shape=(), dtype=tf.string, name="input_images_str")
        decoded_input = tf.map_fn(decode, input_feat, dtype=tf.float32)

        input_tensor = tf.matmul(decoded_input, input_tensor)


        output_tensor = tf.get_default_graph().get_tensor_by_name("feature_fusion/concat_3:0")


        # Saving
        inputs = {
            "input_images_str": input_feat
        }
        outputs = {"feature_fusion/concat_3": output_tensor}
        tf.saved_model.simple_save(
            sess, './tf_model/1', inputs, outputs
        )

当使用base64图像进行预测时,最后一种方法将其返回。

InvalidArgumentError(请参见上面的回溯):您必须使用dtype float和形状[?,?,?,3]的占位符张量“ input_images”输入值

0 个答案:

没有答案