const ::internal::tflite::operand::Index ker_index{node.param().ker_index};
const ::internal::tflite::operand::Index bias_index{node.param().bias_index};
+ const ::internal::tflite::operand::Index vstride_index{node.param().vstride_index};
+ const ::internal::tflite::operand::Index hstride_index{node.param().hstride_index};
+
const auto ofm_shape = _ctx.at(ofm_index).shape().asFeature();
const auto ifm_shape = _ctx.at(ifm_index).shape().asFeature();
const auto ker_shape = _ctx.at(ker_index).shape().asKernel();
param.padding.left = 0;
param.padding.right = 0;
- param.stride.vertical = 0;
- param.stride.horizontal = 0;
+ param.stride.vertical = _ctx.at(vstride_index).asScala<int32_t>();
+ param.stride.horizontal = _ctx.at(hstride_index).asScala<int32_t>();
auto stage = [param] (const IAllocationContext &ctx, IExecutionBuilder &builder)
{
} // namespace internal
#include <memory>
+#include <cassert>
namespace internal
{
data(std::unique_ptr<T>(new T{std::forward<Args>(args)...}));
}
+public:
+ template<typename T> T asScala(void) const
+ {
+ assert((_shape.rank() == 0) || ((_shape.rank() == 1) && (_shape.dim(0) == 1)));
+ assert(_data != nullptr);
+ assert((_data->base() != nullptr) && (_data->size() == sizeof(T)));
+
+ return *(reinterpret_cast<const T *>(_data->base()));
+ }
+
private:
const Shape _shape;
std::unique_ptr<Data> _data;