Files
2026-07-13 13:33:03 +08:00

55 lines
1.6 KiB
C++

//
// TFDense.cpp
// MNNConverter
//
// Created by MNN on 2019/09/27.
// Copyright © 2018, Alibaba Group Holding Limited
//
#include "MNN_generated.h"
#include "TFExtraManager.hpp"
namespace MNN {
namespace Express {
class DenseTransform : public TFExtraManager::Transform {
public:
virtual EXPRP onExecute(EXPRP expr) const override {
auto inputs = expr->inputs();
auto op = expr->get();
MNN_ASSERT(nullptr != op->main_as_Extra());
auto extraAttr = op->main_as_Extra()->attr();
bool transposeA = false;
bool transposeB = false;
bool bias = false;
if (nullptr != extraAttr) {
for (int i = 0; i < extraAttr->size(); ++i) {
auto attr = extraAttr->GetAs<Attribute>(i);
if ("use_bias" == attr->key()->str()) {
bias = attr->b();
continue;
}
if ("transpose_b" == attr->key()->str()) {
transposeB = attr->b();
continue;
}
if ("transpose_a" == attr->key()->str()) {
transposeA = attr->b();
continue;
}
}
}
auto output = _MatMul(inputs[0], inputs[1], transposeA, transposeB);
if (bias) {
output = output + inputs[2];
}
output->setName(expr->name());
return output->expr().first;
}
};
static auto gRegister = []() {
TFExtraManager::get()->insert("Dense", std::shared_ptr<TFExtraManager::Transform>(new DenseTransform));
return true;
}();
} // namespace Express
} // namespace MNN