2015-11-19 2 views
2

Во всех примерах, которые я видел в Tensorflow documentation, вход обрабатывается из статического источника - обычно файла. Возможно ли построить граф, в котором данные поступают из другого источника? В моем примере использования данные поступают из строки сообщения с сервера: я хочу передать эти сообщения, когда они приходят, в тензор и использовать эти тензоры в качестве входных данных для вычислительной части графика.Tensorflow: источник данных может быть динамическим?

ответ

4

Самый простой способ для получения данных из динамического источника поставить один или несколько tf.placeholder() опа в вашем графике для представления входных тензоры, и использовать feed mechanism поставлять различные значения для этих тензоров каждый раз, когда вы называете run(). Если вы это сделаете, можно написать произвольный код Python для генерации входных данных, которые могут включать вызов удаленного сервера или даже на стороне сервера, обрабатывающей входящий запрос.

Если вы делаете это на C++, класс tensorflow::Session предлагает такую ​​же возможность комбинировать значения заполнителя, используя метод Session::Run(). Корректированные значения должны быть tensorflow::Tensor объектов, которые вы можете создать, указав тип данных и форму (список измерений). В Tensor объекты имеют методы, позволяющие получить доступ к ним, как многомерные массивы (как Tensor::scalar<T>(), Tensor::matrix<T>() и Tensor::tensor<T, NDIMS>()), который позволяет заполнить их значения следующим образом:

tensorflow::Tensor t(DT_FLOAT, tensorflow::TensorShape({2, 2})); 
t.matrix()(0, 0) = 1.0; 
t.matrix()(0, 1) = 0.0; 
t.matrix()(1, 0) = 0.0; 
t.matrix()(1, 1) = 1.0; 

Вы также можете использовать все методы библиотеки Eigen Tensor для создания этих значений.

+1

Хорошо, это тот же вывод, что и я. По разным причинам мне нужно разработать часть выполнения на C++, даже если я разработал код для отправки запроса на сервер в C++. В документации я вижу, что существует несколько методов C++ для получения тензора из другого формата, например, строки, массива или подобного ... –

+1

Я добавил некоторые сведения о том, как это сделать, используя C++ - надеюсь, что это поможет! – mrry

+0

Спасибо за ваши ответы. Ваши предложения были очень полезными. Я видел, что есть конструктор, который принимает указатель Allocator. Есть ли способ передать буфер с данными, выделенными в куче для этого конструктора, чтобы Tensor автоматически инициализировался данными, содержащимися в буфере? Я хочу, чтобы по вопросам скорости и эффективности избегать копирования, если это возможно. –

Смежные вопросы