parent
99010e6eae
commit
f347d6e4a1
@ -0,0 +1,85 @@
|
|||||||
|
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
import numpy as np
|
||||||
|
from op_test import OpTest
|
||||||
|
from test_fc_op import fc_refer, MatrixGenerate
|
||||||
|
|
||||||
|
|
||||||
|
class TestFusionRepeatedFCReluOp(OpTest):
|
||||||
|
def setUp(self):
|
||||||
|
self.bs = 3
|
||||||
|
self.ic = 9
|
||||||
|
self.oc = [2, 4, 3]
|
||||||
|
assert len(self.oc) > 1, 'Should larger than 1'
|
||||||
|
self.set_conf()
|
||||||
|
self.op_type = 'fusion_repeated_fc_relu'
|
||||||
|
sz = len(self.oc)
|
||||||
|
ics = [self.ic] + self.oc[0:sz - 1]
|
||||||
|
assert len(ics) == len(self.oc)
|
||||||
|
weights = []
|
||||||
|
biases = []
|
||||||
|
outs = []
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
matrix = MatrixGenerate(self.bs, ics[i], self.oc[i], 1, 1)
|
||||||
|
inp = np.reshape(matrix.input, [self.bs, ics[i]])
|
||||||
|
weights.append(('W_{0}'.format(i), np.reshape(matrix.weights,
|
||||||
|
[ics[i], self.oc[i]])))
|
||||||
|
biases.append(('B_{0}'.format(i), matrix.bias))
|
||||||
|
outs.append(
|
||||||
|
np.reshape(
|
||||||
|
np.maximum(fc_refer(matrix, True), 0), [self.bs, self.oc[i]]))
|
||||||
|
|
||||||
|
for i in range(sz - 1):
|
||||||
|
matrix = MatrixGenerate(self.bs, ics[i + 1], self.oc[i + 1], 1, 1)
|
||||||
|
matrix.input = np.reshape(outs[i], [self.bs, ics[i + 1], 1, 1])
|
||||||
|
out = fc_refer(matrix, True)
|
||||||
|
weights.append(
|
||||||
|
('W_{0}'.format(i + 1),
|
||||||
|
np.reshape(matrix.weights, [ics[i + 1], self.oc[i + 1]])))
|
||||||
|
biases.append(('B_{0}'.format(i + 1), matrix.bias))
|
||||||
|
outs.append(
|
||||||
|
np.reshape(np.maximum(out, 0), [self.bs, self.oc[i + 1]]))
|
||||||
|
|
||||||
|
relu_outs = []
|
||||||
|
for i in range(sz - 1):
|
||||||
|
relu_outs.append(('ReluOut_{0}'.format(i), outs[i]))
|
||||||
|
|
||||||
|
self.inputs = {
|
||||||
|
'X': inp,
|
||||||
|
'W': weights,
|
||||||
|
'Bias': biases,
|
||||||
|
}
|
||||||
|
|
||||||
|
self.outputs = {'Out': outs[-1], 'ReluOut': relu_outs}
|
||||||
|
|
||||||
|
def test_check_output(self):
|
||||||
|
self.check_output()
|
||||||
|
|
||||||
|
def set_conf(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestFusionRepeatedFCReluOpBS1(TestFusionRepeatedFCReluOp):
|
||||||
|
def set_conf(self):
|
||||||
|
self.bs = 1
|
||||||
|
self.oc = [4, 2, 7, 5]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Loading…
Reference in new issue