Для каждого образца у меня есть двумерный массив, который НЕ является изображением, на которое я хотел бы сделать вывод при помощи тензорного потока.В прошлом мне удалось успешно развернуть тензорный поток благодаря ответу на в этом посте , в котором используется следующее serving_input_receiver_fn
:
HEIGHT = 199
WIDTH = 199
CHANNELS = 1
def serving_input_receiver_fn():
def decode_and_resize(image_str_tensor):
"""Decodes jpeg string, resizes it and returns a uint8 tensor."""
image = tf.image.decode_jpeg(image_str_tensor, channels=CHANNELS)
image = tf.expand_dims(image, 0)
image = tf.image.resize_bilinear(
image, [HEIGHT, WIDTH], align_corners=False)
image = tf.squeeze(image, squeeze_dims=[0])
image = tf.cast(image, dtype=tf.uint8)
return image
# Optional; currently necessary for batch prediction.
key_input = tf.placeholder(tf.string, shape=[None])
key_output = tf.identity(key_input)
input_ph = tf.placeholder(tf.string, shape=[None], name='image_binary')
images_tensor = tf.map_fn(
decode_and_resize, input_ph, back_prop=False, dtype=tf.uint8)
images_tensor = tf.image.convert_image_dtype(images_tensor, dtype=tf.float32)
return tf.estimator.export.ServingInputReceiver(
{'images': images_tensor},
{'bytes': input_ph})
Однако для массивов без изображенийстановится неясным следующее:
- Как декодировать закодированный тензор строки.Я взглянул на
tf.io.decode_image
, но, похоже, он не сохраняет размерность двумерного массива. - Как кодировать массив.В случае изображений я сам кодировал данные изображения с помощью
base64.b64encode(img_data)
.Для общих двумерных массивов, как мне их кодировать?
Короче говоря, как обобщить ответ связанного поста на случай массива без изображения?