You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
4.7 KiB
157 lines
4.7 KiB
# Copyright (c) 2020 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 warnings
|
|
|
|
from ..fluid.framework import OpProtoHolder, core, in_dygraph_mode
|
|
from ..fluid.layer_helper import LayerHelper
|
|
from ..fluid.data_feeder import check_variable_and_dtype
|
|
from ..fluid.layers.layer_function_generator import _generate_doc_string_
|
|
|
|
# TODO: define math functions
|
|
# yapf: disable
|
|
__all__ = [
|
|
# 'abs',
|
|
# 'acos',
|
|
# 'asin',
|
|
'atan',
|
|
# 'ceil',
|
|
# 'cos',
|
|
# 'cumsum',
|
|
# 'elementwise_add',
|
|
# 'elementwise_div',
|
|
# 'elementwise_floordiv',
|
|
# 'elementwise_max',
|
|
# 'elementwise_min',
|
|
# 'elementwise_mod',
|
|
# 'elementwise_mul',
|
|
# 'elementwise_pow',
|
|
# 'elementwise_sub',
|
|
# 'exp',
|
|
# 'floor',
|
|
# 'increment',
|
|
# 'log',
|
|
# 'mul',
|
|
# 'multiplex',
|
|
# 'pow',
|
|
# 'reciprocal',
|
|
# 'reduce_max',
|
|
# 'reduce_min',
|
|
# 'reduce_prod',
|
|
# 'reduce_sum',
|
|
# 'round',
|
|
# 'rsqrt',
|
|
# 'scale',
|
|
# 'sign',
|
|
'sin',
|
|
'sqrt',
|
|
# 'square',
|
|
# 'stanh',
|
|
# 'sum',
|
|
# 'sums',
|
|
'tanh',
|
|
# 'elementwise_sum',
|
|
# 'max',
|
|
# 'min',
|
|
# 'mm',
|
|
# 'div',
|
|
# 'add',
|
|
# 'atan',
|
|
# 'logsumexp',
|
|
# 'inverse',
|
|
# 'log1p',
|
|
# 'erf',
|
|
# 'addcmul',
|
|
# 'addmm']
|
|
]
|
|
# yapf: enable.
|
|
|
|
|
|
def generate_op_noattr(op_type):
|
|
"""Register the Python layer for an Operator without Attribute..
|
|
|
|
Args:
|
|
op_type: The name of the operator to be created.
|
|
|
|
This function takes in the operator type (sin, tanh etc) and
|
|
creates the operator functionality.
|
|
|
|
"""
|
|
op_proto = OpProtoHolder.instance().get_op_proto(op_type)
|
|
|
|
def func(x, name=None, out=None):
|
|
if in_dygraph_mode():
|
|
op = getattr(core.ops, op_type)
|
|
return op(x)
|
|
|
|
check_variable_and_dtype(x, 'x', ['float16', 'float32', 'float64'],
|
|
op_type)
|
|
helper = LayerHelper(op_type, **locals())
|
|
|
|
if name and out:
|
|
warnings.warn(
|
|
"Both name and out parameters have been set in fluid.tensor.math.%s(), only out will take effect to specify the result storage. "
|
|
"You can discard either one to solve this warning." % op_type,
|
|
category=UserWarning,
|
|
stacklevel=2)
|
|
if not out:
|
|
out = helper.create_variable_for_type_inference(dtype=x.dtype)
|
|
helper.append_op(type=op_type, inputs={"X": x}, outputs={"Out": out})
|
|
return out
|
|
|
|
func.__name__ = op_type
|
|
func.__doc__ = _generate_doc_string_(
|
|
op_proto,
|
|
additional_args_lines=[
|
|
"name(str, optional): The default value is None. Normally there is no need for user to set this property. For more information, please refer to :ref:`api_guide_Name`.\n "
|
|
"out(Variable, optional): The default value is None. Optional output can be any created Variable that meets the requirements to store the result of operation. if out is None, a new Varibale will be create to store the result."
|
|
])
|
|
func.__doc__ = func.__doc__ + """
|
|
|
|
Return type
|
|
Variable
|
|
Examples:
|
|
.. code-block:: python
|
|
|
|
import numpy as np
|
|
|
|
import paddle
|
|
import paddle.fluid as fluid
|
|
|
|
inputs = fluid.data(name="x", shape = [None, 4], dtype='float32')
|
|
output = paddle.%s(inputs)
|
|
|
|
exe = fluid.Executor(fluid.CPUPlace())
|
|
exe.run(fluid.default_startup_program())
|
|
|
|
#input.shape=1X4, batch_size=1
|
|
img = np.array([[1.0, 2.0, 3.0, 4.0]]).astype(np.float32)
|
|
res = exe.run(fluid.default_main_program(), feed={'x':img}, fetch_list=[output])
|
|
print(res)
|
|
""" % op_type
|
|
return func
|
|
|
|
|
|
__ops__noattr__ = [
|
|
'atan',
|
|
'sin',
|
|
'sqrt',
|
|
'tanh',
|
|
]
|
|
|
|
for _OP in set(__ops__noattr__):
|
|
globals()[_OP] = generate_op_noattr(_OP)
|