forked from alibaba/MNN
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRelu.cpp
More file actions
86 lines (75 loc) · 2.29 KB
/
Copy pathRelu.cpp
File metadata and controls
86 lines (75 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// Relu.cpp
// MNNConverter
//
// Created by MNN on 2019/01/31.
// Copyright © 2018, Alibaba Group Holding Limited
//
#include "OpConverter.hpp"
class Relu : public OpConverter {
public:
virtual void run(MNN::OpT* dstOp, const caffe::LayerParameter& parameters, const caffe::LayerParameter& weight);
Relu() {
}
virtual ~Relu() {
}
virtual MNN::OpType opType() {
return MNN::OpType_ReLU;
}
virtual MNN::OpParameter type() {
return MNN::OpParameter_Relu;
}
};
class Relu6 : public OpConverter {
public:
virtual void run(MNN::OpT* dstOp, const caffe::LayerParameter& parameters, const caffe::LayerParameter& weight);
Relu6() {
}
virtual ~Relu6() {
}
virtual MNN::OpType opType() {
return MNN::OpType_ReLU6;
}
virtual MNN::OpParameter type() {
return MNN::OpParameter_Relu6;
}
};
void Relu::run(MNN::OpT* dstOp, const caffe::LayerParameter& parameters, const caffe::LayerParameter& weight) {
auto relu = new MNN::ReluT;
if (parameters.relu_param().has_negative_slope()) {
relu->slope = parameters.relu_param().negative_slope();
} else {
relu->slope = 0.0f;
}
dstOp->main.value = relu;
}
static OpConverterRegister<Relu> a("ReLU");
void Relu6::run(MNN::OpT* dstOp, const caffe::LayerParameter& parameters, const caffe::LayerParameter& weight) {
auto relu6 = new MNN::Relu6T;
relu6->slope = 0.0f;
dstOp->main.value = relu6;
}
static OpConverterRegister<Relu6> b("ReLU6");
class PRelu : public OpConverter {
public:
virtual void run(MNN::OpT* dstOp, const caffe::LayerParameter& parameters, const caffe::LayerParameter& weight) {
auto relu = new MNN::PReluT;
auto v0w = &weight;
const caffe::BlobProto& slope_blob = v0w->blobs(0);
relu->slopeCount = slope_blob.data_size();
relu->slope.resize(relu->slopeCount);
memcpy(relu->slope.data(), slope_blob.data().data(), sizeof(float) * relu->slopeCount);
dstOp->main.value = relu;
}
PRelu() {
}
virtual ~PRelu() {
}
virtual MNN::OpType opType() {
return MNN::OpType_PReLU;
}
virtual MNN::OpParameter type() {
return MNN::OpParameter_PRelu;
}
};
static OpConverterRegister<PRelu> __a("PReLU");