Почему моя сохраненная модель Tensorflow предсказывает бессмыслицу при ее восстановлении? - PullRequest
0 голосов
/ 19 января 2020

Я обучил сверточную нейронную сеть в Tensorflow, которая анализирует изображения и подсчитывает объекты в них, и сохранила их для дальнейшего использования. Сейчас я пытаюсь восстановить модель и предсказать значения для изображений, нарезанных на плитки. Однако я получаю бессмысленные значения и почти одинаковое число для каждой плитки. Каждая загруженная модель дает числа вокруг определенного значения c, одинакового для каждого изображения, но различного для каждой модели. Я думаю, что, возможно, я использую неправильный тензор из восстановленной модели? Вот выдержка из моего кода:

x = tf.placeholder(tf.float32, [None, 98, 98, 3], name='x')
y = tf.placeholder(tf.float32, [None, ], name='y') 

# create two convolutional layers: layer1 and layer2

s3 = create_conv_layer_for_sum(layer2, f2, f3, [5, 5], 2, outf_sum, name='s_layer3')
y_pred = s3

error = tf.pow((y - y_pred), 2)
# other error measures also present
optimiser = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(error)
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    # train the model here
    saver = tf.train.Saver()
        save_path = saver.save(sess, "models/model"+str(num)+"/model.ckpt")


def create_conv_layer_for_sum(input_data, num_input_channels, num_filters, filter_shape, stride, out_fction, name):
    # ...
    sum = tf.reduce_sum(transformed, axis=[1, 2, 3], name=name+'_output')
    return sum 

Эта часть - тренировка и сохранение. Затем я восстанавливаю модель:

    sess = tf.Session()

    saver = tf.train.import_meta_graph('models/' + model + '/model.ckpt.meta')
    saver.restore(sess, 'models/' + model + '/model.ckpt')

    inputData = CNNutils.load_photo(photo, 98)  # cuts photo into squares and stacks those as a numpy array

    graph = tf.get_default_graph()

    x = graph.get_tensor_by_name('x:0')

    s3 = graph.get_tensor_by_name('s_layer3_output:0')

    y_pred = tf.reduce_sum(s3)

    pred, sum3 = sess.run([y_pred, s3], feed_dict={x: inputData})
    print(pred)
    print(sum3) 

s3 должен быть выводом последнего слоя, а затем y_pred складывает прогнозы для всего изображения из отдельных плиток.

I буду благодарен за любую помощь.

1 Ответ

0 голосов
/ 13 апреля 2020

Можете ли вы сохранить модель с помощью model.save и восстановить модель с помощью load_model.

Keras поддерживает более простой интерфейс для сохранения весов модели и архитектуры модели в одном файле H5.

Сохранение модели с помощью model.save включает все, что нам нужно знать о модели , включая:

  1. Веса модели.
  2. Архитектура модели.
  3. Детали компиляции модели (потери и метрики).
  4. Состояние оптимизатора модели.

Сохраненную модель затем можно загрузить, вызвав функцию load_model() и передав имя файла. Функция возвращает модель с той же архитектурой и весами.

Пример сохранения и загрузки модели можно найти здесь .

...