我想添加一层以将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”输入值