提交 bdda08d9 编写于 作者: C chengduoZH

add sin

上级 2e577379
...@@ -100,7 +100,7 @@ cc_test(init_test SRCS init_test.cc DEPS init) ...@@ -100,7 +100,7 @@ cc_test(init_test SRCS init_test.cc DEPS init)
cc_test(op_kernel_type_test SRCS op_kernel_type_test.cc DEPS place device_context framework_proto) cc_test(op_kernel_type_test SRCS op_kernel_type_test.cc DEPS place device_context framework_proto)
cc_test(cow_ptr_tests SRCS details/cow_ptr_test.cc) cc_test(cow_ptr_tests SRCS details/cow_ptr_test.cc)
cc_test(channel_test SRCS channel_test.cc) # cc_test(channel_test SRCS channel_test.cc)
cc_test(tuple_test SRCS tuple_test.cc ) cc_test(tuple_test SRCS tuple_test.cc )
cc_test(concurrency_test SRCS concurrency_test.cc DEPS go_op channel_close_op channel_create_op cc_test(concurrency_test SRCS concurrency_test.cc DEPS go_op channel_close_op channel_create_op
channel_send_op channel_recv_op sum_op select_op elementwise_add_op compare_op channel_send_op channel_recv_op sum_op select_op elementwise_add_op compare_op
......
...@@ -264,10 +264,10 @@ class CosOpMaker : public framework::OpProtoAndCheckerMaker { ...@@ -264,10 +264,10 @@ class CosOpMaker : public framework::OpProtoAndCheckerMaker {
public: public:
CosOpMaker(OpProto *proto, OpAttrChecker *op_checker) CosOpMaker(OpProto *proto, OpAttrChecker *op_checker)
: framework::OpProtoAndCheckerMaker(proto, op_checker) { : framework::OpProtoAndCheckerMaker(proto, op_checker) {
AddInput("X", "Input of Floor operator"); AddInput("X", "Input of Cosine operator");
AddOutput("Out", "Output of Floor operator"); AddOutput("Out", "Output of Cosine operator");
AddComment(R"DOC( AddComment(R"DOC(
Floor Activation Operator. Cosine Activation Operator.
$out = cos(x)$ $out = cos(x)$
...@@ -275,6 +275,21 @@ $out = cos(x)$ ...@@ -275,6 +275,21 @@ $out = cos(x)$
} }
}; };
class SinOpMaker : public framework::OpProtoAndCheckerMaker {
public:
SinOpMaker(OpProto *proto, OpAttrChecker *op_checker)
: framework::OpProtoAndCheckerMaker(proto, op_checker) {
AddInput("X", "Input of Sine operator");
AddOutput("Out", "Output of Sine operator");
AddComment(R"DOC(
Sine Activation Operator.
$out = sin(x)$
)DOC");
}
};
class RoundOpMaker : public framework::OpProtoAndCheckerMaker { class RoundOpMaker : public framework::OpProtoAndCheckerMaker {
public: public:
RoundOpMaker(OpProto *proto, OpAttrChecker *op_checker) RoundOpMaker(OpProto *proto, OpAttrChecker *op_checker)
...@@ -579,6 +594,9 @@ REGISTER_OP(floor, ops::ActivationOp, ops::FloorOpMaker, floor_grad, ...@@ -579,6 +594,9 @@ REGISTER_OP(floor, ops::ActivationOp, ops::FloorOpMaker, floor_grad,
REGISTER_OP(cos, ops::ActivationOp, ops::CosOpMaker, cos_grad, REGISTER_OP(cos, ops::ActivationOp, ops::CosOpMaker, cos_grad,
ops::ActivationOpGrad); ops::ActivationOpGrad);
REGISTER_OP(sin, ops::ActivationOp, ops::SinOpMaker, sin_grad,
ops::ActivationOpGrad);
REGISTER_OP(round, ops::ActivationOp, ops::RoundOpMaker, round_grad, REGISTER_OP(round, ops::ActivationOp, ops::RoundOpMaker, round_grad,
ops::ActivationOpGrad); ops::ActivationOpGrad);
......
...@@ -831,6 +831,7 @@ struct SwishGradFunctor : public BaseActivationFunctor<T> { ...@@ -831,6 +831,7 @@ struct SwishGradFunctor : public BaseActivationFunctor<T> {
__macro(ceil, CeilFunctor, ZeroGradFunctor); \ __macro(ceil, CeilFunctor, ZeroGradFunctor); \
__macro(floor, FloorFunctor, ZeroGradFunctor); \ __macro(floor, FloorFunctor, ZeroGradFunctor); \
__macro(cos, CosFunctor, CosGradFunctor); \ __macro(cos, CosFunctor, CosGradFunctor); \
__macro(sin, SinFunctor, SinGradFunctor); \
__macro(round, RoundFunctor, ZeroGradFunctor); \ __macro(round, RoundFunctor, ZeroGradFunctor); \
__macro(reciprocal, ReciprocalFunctor, ReciprocalGradFunctor); \ __macro(reciprocal, ReciprocalFunctor, ReciprocalGradFunctor); \
__macro(log, LogFunctor, LogGradFunctor); \ __macro(log, LogFunctor, LogGradFunctor); \
......
...@@ -63,7 +63,6 @@ struct EigenBlasGemm { ...@@ -63,7 +63,6 @@ struct EigenBlasGemm {
const EigenMatrix a(const_cast<T*>(A), sizeA); const EigenMatrix a(const_cast<T*>(A), sizeA);
const EigenMatrix b(const_cast<T*>(B), sizeB); const EigenMatrix b(const_cast<T*>(B), sizeB);
EigenMatrix c(C, sizeC); EigenMatrix c(C, sizeC);
Eigen::Tensor<T, 2, Eigen::RowMajor, int> ss;
typedef typename Eigen::Tensor<T, 2>::DimensionPair DimPair; typedef typename Eigen::Tensor<T, 2>::DimensionPair DimPair;
Eigen::array<DimPair, 1> dims; Eigen::array<DimPair, 1> dims;
......
...@@ -26,6 +26,7 @@ __activations__ = [ ...@@ -26,6 +26,7 @@ __activations__ = [
'ceil', 'ceil',
'floor', 'floor',
'cos', 'cos',
'sin',
'round', 'round',
'reciprocal', 'reciprocal',
'log', 'log',
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
import unittest import unittest
import numpy as np import numpy as np
import math
import paddle.fluid.core as core import paddle.fluid.core as core
from op_test import OpTest from op_test import OpTest
from scipy.special import expit from scipy.special import expit
...@@ -202,7 +201,21 @@ class TestCos(OpTest): ...@@ -202,7 +201,21 @@ class TestCos(OpTest):
self.op_type = "cos" self.op_type = "cos"
x = np.random.uniform(-1, 1, [4, 4]).astype("float32") x = np.random.uniform(-1, 1, [4, 4]).astype("float32")
self.inputs = {'X': x} self.inputs = {'X': x}
self.outputs = {'Out': math.cos(self.inputs['X'])} self.outputs = {'Out': np.cos(self.inputs['X'])}
def test_check_output(self):
self.check_output()
def test_check_grad(self):
self.check_grad(['X'], 'Out', max_relative_error=0.007)
class TestSin(OpTest):
def setUp(self):
self.op_type = "sin"
x = np.random.uniform(-1, 1, [4, 4]).astype("float32")
self.inputs = {'X': x}
self.outputs = {'Out': np.sin(self.inputs['X'])}
def test_check_output(self): def test_check_output(self):
self.check_output() self.check_output()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册