Nano Hash - криптовалюты, майнинг, программирование

Не найдено: FeedInputs: не удалось найти вывод фида TensorFlow

Я пробовал этот пример использования сохраненной модели Tensorflow на С++ на этом веб-сайте: https://medium.com/jim-fleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f#.ji310n4zo

Это работает хорошо. Но он не сохраняет значения переменных a и b, поскольку сохраняет только график, а не переменные. . Я попытался заменить следующую строку:

tf.train.write_graph(sess.graph_def, 'models/', 'graph.pb', as_text=False)

с

saver.save(sess, 'models/graph', global_step=0)

конечно после создания объекта заставки. Не работает и выдает:

Не найдено: FeedInputs: не удалось найти выходные данные фида

Я проверил узлы, которые загружены, и они только:

_ИСТОЧНИК

_РАКОВИНА

в то время как в функции write_graph, а затем загрузить модель в C++, я загрузил следующие узлы:

_ИСТОЧНИК

_РАКОВИНА

сохранить/восстановить_slice_1/shape_and_slice

сохранить/восстановить_slice_1/tensor_name

сохранить/восстановить_срез/shape_and_slice

сохранить/восстановить_слайс/tensor_name

сохранить/сохранить/shapes_and_slices

сохранить/сохранить/tensor_names

сохранить/постоянный

сохранить/восстановить_slice_1

сохранить/восстановить_slice

b

сохранить/назначить_1

хлеб

б/начальное_значение

б/назначить

a

сохранить/назначить

сохранить/восстановить_все

сохранить/сохранить

сохранить/control_dependency

а/читать

c

а/начальное_значение

а/назначить

в этом

Тензор

и даже файл графа, созданный saver.save(), намного меньше, 165 байт, по сравнению с файлом, созданным write_graph, 1,9 КБ.

14.01.2016

  • Кажется, теперь я знаю причину. Это потому, что write_graph записывает график без значений переменных, а saver.save записывает значения переменных без графика :). Не знаю, почему они так поступили! Я не мог найти способ прочитать график, а затем загрузить значения в С++. 15.01.2016

Ответы:


1

Я не уверен, что это лучший способ решить проблему, но, по крайней мере, он ее решает.

Поскольку write_graph также может хранить значения констант, я добавил следующий код в python непосредственно перед записью графика с помощью функции write_graph:

for v in tf.trainable_variables():
    vc = tf.constant(v.eval())
    tf.assign(v, vc, name="assign_variables")

Это создает константы, которые сохраняют значения переменных после обучения, а затем создают тензоры "assign_variables" для назначения их переменным. Теперь, когда вы вызываете write_graph, он будет сохранять значения переменных в файле.

Осталось только вызвать эти тензоры "assign_variables" в коде C, чтобы убедиться, что вашим переменным присвоены значения констант, которые хранятся в файле. Вот один из способов сделать это:

      Status status = NewSession(SessionOptions(), &session);
      std::vector<tensorflow::Tensor> outputs;
      for(int i = 0;status.ok(); i++) {
        char name[100];
        if (i==0)
            sprintf(name, "assign_variables");
        else
            sprintf(name, "assign_variables_%d", i);

        status = session->Run({}, {name}, {}, &outputs);
      }
15.01.2016
  • Приветствуется ответ на ваш собственный вопрос, поскольку другие могут извлечь уроки из вашего опыта. 15.01.2016

  • 2

    Есть еще один способ восстановить переменные, вызвав операцию save/restore_all, которая должна присутствовать в графе:

    std::vector<tensorflow::Tensor> outputs;
    Tensor checkpoint_filepath(DT_STRING, TensorShape());
    checkpoint_filepath.scalar<std::string>()() = "path to the checkpoint file";
    status = session->Run( {{ "save/Const", checkpoint_filepath },}, 
                           {}, {"save/restore_all"}, &outputs);
    
    22.03.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..