Тензор Флоу Слим - как сделать вывод? - PullRequest
0 голосов
/ 28 декабря 2018

Я должен использовать TensorFlow 1.9 (пока нет возможности использовать самую новую версию).Я создал псевдо-VGG-модель и могу обучить модель + сохранить ее.

Это резюме:

# "generate" function returns a tensorflow dataset with correct labels
# and images data. 
# "_parse_function" resizes images to 224, 224, 3 shape
train_ds = generate('../data/train/*/*', transform_fn=_parse_function, batch_size=8)
iterator = train_ds.make_one_shot_iterator()
images, labels = iterator.get_next()

print(images, labels)
print(images.get_shape())

x = slim.conv2d(images, 64, (3,3), scope='input')
x = slim.conv2d(x, 64, (3,3))
x = slim.max_pool2d(x, (1,1))
x = slim.conv2d(x,128, (3,3))
x = slim.conv2d(x, 128, (3,3))
x = slim.max_pool2d(x, (1,1))
# ... other conv, maxpool, and so on, then
x = slim.flatten(x)
x = slim.fully_connected(x, 64, activation_fn=tf.nn.relu)
x = slim.fully_connected(x, 16, activation_fn=tf.nn.relu)
logits = slim.fully_connected(x, 3, activation_fn=None, scope='output')

Затем я обучаю его так:

loss = tf.losses.softmax_cross_entropy(labels, logits)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=.001)

total_loss = tf.losses.get_total_loss()
tf.summary.scalar('loss', total_loss)

train_op = slim.learning.create_train_op(total_loss, optimizer)
slim.learning.train(
    train_op,
    './logs',
    save_summaries_secs=20)

Теперь все в порядке, у меня есть файлы в каталоге "./logs".

Теперь я открываю новый сеанс и пытаюсь загрузить модель, а затем сделать "прогноз" с другим изображением.Но я не могу найти тензор «ввода».

saver = tf.train.import_meta_graph('./logs/model.ckpt-214.meta')
with tf.Session() as sess:
    saver.restore(sess, tf.train.latest_checkpoint('./logs'))
    # what to set ?
    sess.run('???', {'???': image})

Проблема в том, что в моей модели я использую «изображения» в слое conv2d - это то, что возвращает итератор, когда я вызываю «get_next»метод.

Но список операций дает мне «input / Conv2D», который ожидает (224, 224, 3, 64) => 64, то есть число сверток, которое нужно сделать.Я ищу, где существует заполнитель для ввода (1,224,224,3) ввода, но я не нахожу его.

Я попытался импортировать модель, используйте "tf.graph_util.convert_variables_to_constants" для экспортаболее простая модель, но проблема та же: какой правильный ввод использовать?

Это резюме входных данных, которые я вижу:

 ['OneShotIterator', 'IteratorGetNext', 'Conv/weights', 'Conv/biases', 'Conv/Conv2D', 'Conv/BiasAdd', 'Conv/Relu', 'Conv_1/weights', 'Conv_1/biases', 'Conv_1/Conv2D', 'Conv_1/BiasAdd', 'Conv_1/Relu', 'MaxPool2D/MaxPool' ...

PS: обратите внимание, что я 'Я пришел из Кераса, и я не очень доволен низкоуровневой абстракцией TensorFlow.Я пытаюсь «похудеть», чтобы сохранить абстракцию и использовать ее на оборудовании Movidius.Цель состоит в том, чтобы иметь возможность удалять операции обучения и использовать переменные для последующего преобразования.

Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...