Извлечение слитого типа активации из файла TFLite - PullRequest
0 голосов
/ 17 марта 2020

Я анализирую файлы TFLite (Tensorflow 1.15, схема версии 3), используя Python. Все (шаги и другие) работает нормально, но объединенный тип активации всегда возвращает 0. Это означает, что слоя активации нет, но мы знаем, что есть Relu6 , Что я делаю не так в этом фрагменте кода?

conv2d_opt = DepthwiseConv2DOptions.DepthwiseConv2DOptions()
conv2d_opt.Init(graph.Operators(operator_index).BuiltinOptions().Bytes,graph.Operators(operator_index).BuiltinOptions().Pos)
row_stride = conv2d_opt.StrideW()
col_stride = conv2d_opt.StrideH()
FusedActivationFunction = conv2d_opt.FusedActivationFunction()

1 Ответ

0 голосов
/ 19 марта 2020

Нашел ответ с помощью Даниэля Ситунаяке. По сути, ядра Conv2D или DS_Conv2D обрезают вывод на значения уровня output_activation_max и output_activation_min всегда . Пожалуйста, смотрите ниже. Таким образом, вы получаете Relu / Relu6 / None по умолчанию, не добавляя дополнительный слой. Пример из ядра deepwise_conv в https://github.com/tensorflow/tensorflow/blob/88bd10e84273f558a72714890ab7d04789ebbe37/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h#L266

acc = DepthwiseConvRound<output_rounding>(
      acc, output_multiplier[output_channel],
      output_shift[output_channel]);
acc += output_offset;
**acc = std::max(acc, output_activation_min);
acc = std::min(acc, output_activation_max);**
output_data[Offset(output_shape, batch, out_y, out_x,
                                 output_channel)] = static_cast<int8_t>(acc);
...