Я использую экспортированную модель классификации из Google AutoML Vision, поэтому у меня есть только saved_model.pb
и нет переменных, контрольных точек и т. Д. Я хочу загрузить этот график модели в локальную установку TensorFlow, использовать ее для вывода и продолжить обучениес большим количеством фотографий.
Основные вопросы:
Возможен ли этот план, т. Е. Использовать один saved_model.pb
без переменных, контрольных точек и т. Д. Иобучить полученный график новым данным?
Если да: как получить форму ввода (?,)
с изображениями, закодированными в виде строк?
В идеале, забегая вперед: есть что-то важное для учебной части?
Справочная информация о коде:
Чтобы прочитать изображение, я использую тот же подход, что и при использовании контейнера Docker для вывода, следовательно, закодированное изображение base64.
Для загрузкиgraph, я проверил, какой набор тегов необходим графу через CLI (saved_model_cli show --dir input/model
), который равен serve
.
Чтобы получить имена входных тензоров, я использую graph.get_operations()
, что дает мне Placeholder:0
для image_bytes и Placeholder:1_0
для клавиши (просто произвольная строка идентифицирует изображение). Оба имеют размерность dim -1
import tensorflow as tf
import numpy as np
import base64
path_img = "input/testimage.jpg"
path_mdl = "input/model"
# input to network expected to be base64 encoded image
with io.open(path_img, 'rb') as image_file:
encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
# reshaping to (1,) as the expecte dimension is (?,)
feed_dict_option1 = {
"Placeholder:0": { np.array(str(encoded_image)).reshape(1,) },
"Placeholder_1:0" : "image_key"
}
# reshaping to (1,1) as the expecte dimension is (?,)
feed_dict_option2 = {
"Placeholder:0": np.array(str(encoded_image)).reshape(1,1),
"Placeholder_1:0" : "image_key"
}
with tf.Session(graph=tf.Graph()) as sess:
tf.saved_model.loader.load(sess, ["serve"], path_mdl)
graph = tf.get_default_graph()
sess.run('scores:0',
feed_dict=feed_dict_option1)
sess.run('scores:0',
feed_dict=feed_dict_option2)
Вывод:
# for input reshaped to (1,)
ValueError: Cannot feed value of shape (1,) for Tensor 'Placeholder:0', which has shape '(?,)'
# for input reshaped to (1,1)
ValueError: Cannot feed value of shape (1, 1) for Tensor 'Placeholder:0', which has shape '(?,)'
Как получить форму ввода (?,)
?
Большое спасибо.