#include "util/tensor/Index.h"
#include "util/tensor/Diff.h"
+#include "util/tensor/Shape.h"
#include "support/tflite/TensorView.h"
#include <random>
+template <typename T> class RandomGenerator
+{
+public:
+ RandomGenerator(int seed, T mean, T stddev) : _rand{seed}, _dist{mean, stddev}
+ {
+ // DO NOTHING
+ }
+
+ T operator()(const ::nnfw::util::tensor::Shape &, const ::nnfw::util::tensor::Index &)
+ {
+ return _dist(_rand);
+ }
+
+private:
+ std::minstd_rand _rand;
+ std::normal_distribution<T> _dist;
+};
+
// For NNAPI testing
struct RandomTestParam
{
{
public:
RandomTestRunner(int seed, const RandomTestParam ¶m)
- : _rand{seed}, _param{param}
+ : _randgen{seed, 0.0f, 2.0f}, _param{param}
{
// DO NOTHING
}
int run(const nnfw::support::tflite::interp::Builder &builder);
private:
- std::minstd_rand _rand;
+ RandomGenerator<float> _randgen;
const RandomTestParam _param;
};
assert(pure->inputs() == nnapi->inputs());
// Fill IFM with random numbers
- auto ifm_gen = [this](const nnfw::util::tensor::Shape &, const nnfw::util::tensor::Index &) {
- // TODO Allow users to set min/max and distribution
- std::normal_distribution<float> dist(0.0f, 2.0f);
- return dist(_rand);
- };
-
for (const auto id : pure->inputs())
{
assert(pure->tensor(id)->type == nnapi->tensor(id)->type);
assert(pure_view.shape() == nnapi_view.shape());
- const nnfw::util::tensor::Object<float> data(pure_view.shape(), ifm_gen);
+ const nnfw::util::tensor::Object<float> data(pure_view.shape(), _randgen);
assert(pure_view.shape() == data.shape());