Изменение тензора в С - PullRequest
       17

Изменение тензора в С

0 голосов
/ 22 ноября 2018

Как я могу изменить форму TF_Tensor * с помощью C_api Tensorflow, как это делается в C ++?

TensorShape inputShape({1,1,80,80});

Tensor inputTensor;
Tensor newTensor;

bool result = inputTensor->CopyFrom(newTensor, inputShape);

Я не вижу аналогичного метода, использующего c_api tenorflow.

1 Ответ

0 голосов
/ 22 ноября 2018

Tensorflow C API работает с моделью (data,dims), обрабатывая данные как плоский массив, снабженный необходимыми измерениями.

Шаг 1 : выделение new Тензор

Посмотрите на TF_AllocateTensor ( ref ):

TF_CAPI_EXPORT extern TF_Tensor* TF_AllocateTensor(TF_DataType,
                                                   const int64_t* dims,
                                                   int num_dims, size_t len);

Здесь:

  1. TF_DataType: TF эквивалентнеобходимого типа данных: здесь .
  2. dims: Массив, соответствующий размерам тензора, который должен быть выделен, например.{1, 1, 80, 80}
  3. num_dims: длина затемнения (4 выше)
  4. len: уменьшение (затемнение *): т.е. 1 * 1 * 80 * 80 * sizeof (DataType) = 6400 * sizeof (DataType).

Шаг 2 : копирование данных

// Get the tensor buffer
auto buff = (DataType *)TF_TensorData(output_of_tf_allocate);
// std::memcpy() ...

Здесь - пример кодаИз проекта, который я сделал некоторое время назад, для написания очень лёгкого Tensorflow C-API Wrapper.

Итак, по сути, ваше изменение будет включать выделение вашего нового тензора и копирование данных из исходного тензора в buff.

API-интерфейс Tensorflow C не предназначен для регулярного использования, поэтому его сложнее освоить + не хватает документации.Я понял многое из этого с помощью экспериментов.Есть предложения от более опытных разработчиков?

...