ops.py 11.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#   Copyright (c) 2022 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 os
17 18 19 20 21 22
from .layer_function_generator import (
    generate_layer_fn,
    generate_activation_fn,
    generate_inplace_fn,
    add_sample_code,
)
23 24 25
from ..framework import core
from ..framework import convert_np_dtype_to_dtype_
from ..static import Variable
26 27 28 29 30 31
from ..fluid.data_feeder import (
    convert_dtype,
    check_variable_and_dtype,
    check_type,
    check_dtype,
)
32
from ..fluid.framework import in_dygraph_mode
33
from .. import _C_ops, _legacy_C_ops
34 35 36

__deprecated_func_name__ = {
    'tanh_shrink': 'tanhshrink',
37
    'logsigmoid': 'log_sigmoid',
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
}

__activations_noattr__ = [
    'sigmoid',
    'silu',
    'logsigmoid',
    'tanh_shrink',
    'softplus',
    'softsign',
    'tanh',
]

__unary_func__ = [
    'exp',
    'expm1',
    'atan',
    'sqrt',
    'rsqrt',
    'abs',
    'ceil',
    'floor',
    'cos',
    'tan',
    'acos',
    'sin',
    'sinh',
    'asin',
    'cosh',
    'round',
    'reciprocal',
    'square',
    'acosh',
    'asinh',
    'atanh',
]

__inplace_unary_func__ = [
    'exp_',
    'sqrt_',
    'rsqrt_',
    'ceil_',
    'floor_',
    'round_',
    'reciprocal_',
]

__all__ = []

# It is a hot fix in some unittest using:
#   fluid.layers.scale(x=x, scale=10.0, out=out_var)
# e.g.: test_program_code.py, test_dist_train.py
globals()['_scale'] = generate_layer_fn('scale')

globals()['_elementwise_div'] = generate_layer_fn('elementwise_div')

for _OP in set(__activations_noattr__):
    _new_OP = _OP
    if _OP in __deprecated_func_name__:
        _new_OP = __deprecated_func_name__[_OP]
    _func = generate_activation_fn(_OP)
    globals()[_OP] = _func

for _OP in set(__unary_func__):
    _new_OP = _OP
    if _OP in __deprecated_func_name__:
        _new_OP = __deprecated_func_name__[_OP]
    _func = generate_activation_fn(_OP)
    globals()[_OP] = _func

for _OP in set(__inplace_unary_func__):
    _new_OP = _OP
    if _OP in __deprecated_func_name__:
        _new_OP = __deprecated_func_name__[_OP]
    _func = generate_inplace_fn(_OP)
    globals()[_OP] = _func

114
add_sample_code(
115 116
    globals()["sigmoid"],
    r"""
117 118 119 120 121 122 123 124 125 126 127
Examples:
    .. code-block:: python

        import paddle
        import paddle.nn.functional as F

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = F.sigmoid(x)
        print(out)
        # [0.40131234 0.450166   0.52497919 0.57444252]

128 129
""",
)
130

131
add_sample_code(
132 133
    globals()["silu"],
    r"""
134 135 136 137 138 139 140 141 142 143 144
Examples:
    .. code-block:: python

        import paddle
        import paddle.nn.functional as F

        x = paddle.to_tensor([1.0, 2.0, 3.0, 4.0])
        out = F.silu(x)
        print(out)
        # [ 0.7310586 1.7615942 2.8577224, 3.9280552 ]

145 146
""",
)
147

148
add_sample_code(
149 150
    globals()["logsigmoid"],
    r"""
151 152 153 154 155 156 157 158 159 160 161
Examples:
    .. code-block:: python

        import paddle
        import paddle.nn.functional as F

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = F.log_sigmoid(x)
        print(out)
        # [-0.91301525 -0.79813887 -0.64439666 -0.55435524]

162 163
""",
)
164

165
add_sample_code(
166 167
    globals()["exp"],
    r"""
168 169 170 171 172 173 174 175 176 177
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.exp(x)
        print(out)
        # [0.67032005 0.81873075 1.10517092 1.34985881]

178 179
""",
)
180

181
add_sample_code(
182 183
    globals()["expm1"],
    r"""
184 185 186 187 188 189 190 191 192 193
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.expm1(x)
        print(out)
        # [-0.32967997, -0.18126924,  0.10517092,  0.34985882]

194 195
""",
)
196

197
add_sample_code(
198 199
    globals()["tanh"],
    r"""
200 201 202 203 204 205 206 207 208 209
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.tanh(x)
        print(out)
        # [-0.37994896 -0.19737532  0.09966799  0.29131261]

210 211
""",
)
212

213
add_sample_code(
214 215
    globals()["atan"],
    r"""
216 217 218 219 220 221 222 223 224 225
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.atan(x)
        print(out)
        # [-0.38050638 -0.19739556  0.09966865  0.29145679]

226 227
""",
)
228

229
add_sample_code(
230 231
    globals()["tanh_shrink"],
    r"""
232 233 234 235 236 237 238 239 240 241 242
Examples:
    .. code-block:: python

        import paddle
        import paddle.nn.functional as F

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = F.tanhshrink(x) 
        print(out)
        # [-0.020051, -0.00262468, 0.000332005, 0.00868739]

243 244
""",
)
245

246
add_sample_code(
247 248
    globals()["sqrt"],
    r"""
249 250 251 252 253 254 255 256 257 258
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([0.1, 0.2, 0.3, 0.4])
        out = paddle.sqrt(x)
        print(out)
        # [0.31622777 0.4472136  0.54772256 0.63245553]

259 260
""",
)
261

262
add_sample_code(
263 264
    globals()["rsqrt"],
    r"""
265 266 267 268 269 270 271 272 273 274
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([0.1, 0.2, 0.3, 0.4])
        out = paddle.rsqrt(x)
        print(out)
        # [3.16227766 2.23606798 1.82574186 1.58113883]

275 276
""",
)
277

278
add_sample_code(
279 280
    globals()["abs"],
    r"""
281 282 283 284 285 286 287 288 289 290
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.abs(x)
        print(out)
        # [0.4 0.2 0.1 0.3]

291 292
""",
)
293

294
add_sample_code(
295 296
    globals()["ceil"],
    r"""
297 298 299 300 301 302 303 304 305 306
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.ceil(x)
        print(out)
        # [-0. -0.  1.  1.]

307 308
""",
)
309

310
add_sample_code(
311 312
    globals()["floor"],
    r"""
313 314 315 316 317 318 319 320 321 322
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.floor(x)
        print(out)
        # [-1. -1.  0.  0.]

323 324
""",
)
325

326
add_sample_code(
327 328
    globals()["cos"],
    r"""
329 330 331 332 333 334 335 336 337 338
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.cos(x)
        print(out)
        # [0.92106099 0.98006658 0.99500417 0.95533649]

339 340
""",
)
341

342
add_sample_code(
343 344
    globals()["tan"],
    r"""
345 346 347 348 349 350 351 352 353 354
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.tan(x)
        print(out)
        # [-0.42279324, -0.20271005, 0.10033467, 0.30933627]

355 356
""",
)
357

358
add_sample_code(
359 360
    globals()["acos"],
    r"""
361 362 363 364 365 366 367 368 369 370
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.acos(x)
        print(out)
        # [1.98231317 1.77215425 1.47062891 1.26610367]

371 372
""",
)
373

374
add_sample_code(
375 376
    globals()["sin"],
    r"""
377 378 379 380 381 382 383 384 385 386
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.sin(x)
        print(out)
        # [-0.38941834 -0.19866933  0.09983342  0.29552021]

387 388
""",
)
389

390
add_sample_code(
391 392
    globals()["asin"],
    r"""
393 394 395 396 397 398 399 400 401 402
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.asin(x)
        print(out)
        # [-0.41151685 -0.20135792  0.10016742  0.30469265]

403 404
""",
)
405

406
add_sample_code(
407 408
    globals()["cosh"],
    r"""
409 410 411 412 413 414 415 416 417 418
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.cosh(x)
        print(out)
        # [1.08107237 1.02006676 1.00500417 1.04533851]

419 420
""",
)
421

422
add_sample_code(
423 424
    globals()["sinh"],
    r"""
425 426 427 428 429 430 431 432 433 434
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.sinh(x)
        print(out)
        # [-0.41075233 -0.201336    0.10016675  0.30452029]

435 436
""",
)
437

438
add_sample_code(
439 440
    globals()["asinh"],
    r"""
441 442 443 444 445 446 447 448 449 450
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.asinh(x)
        print(out)
        # [-0.39003533, -0.19869010,  0.09983408,  0.29567307]

451 452
""",
)
453

454
add_sample_code(
455 456
    globals()["acosh"],
    r"""
457 458 459 460 461 462 463 464 465 466
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([1., 3., 4., 5.])
        out = paddle.acosh(x)
        print(out)
        # [0.        , 1.76274729, 2.06343699, 2.29243159]

467 468
""",
)
469

470
add_sample_code(
471 472
    globals()["atanh"],
    r"""
473 474 475 476 477 478 479 480 481 482
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.atanh(x)
        print(out)
        # [-0.42364895, -0.20273256,  0.10033535,  0.30951962]

483 484
""",
)
485

486
add_sample_code(
487 488
    globals()["round"],
    r"""
489 490 491 492 493 494 495 496 497 498
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.5, -0.2, 0.6, 1.5])
        out = paddle.round(x)
        print(out)
        # [-1. -0.  1.  2.]

499 500
""",
)
501

502
add_sample_code(
503 504
    globals()["reciprocal"],
    r"""
505 506 507 508 509 510 511 512 513 514
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.reciprocal(x)
        print(out)
        # [-2.5        -5.         10.          3.33333333]

515 516
""",
)
517

518
add_sample_code(
519 520
    globals()["square"],
    r"""
521 522 523 524 525 526 527 528 529 530
Examples:
    .. code-block:: python

        import paddle

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.square(x)
        print(out)
        # [0.16 0.04 0.01 0.09]

531 532
""",
)
533

534
add_sample_code(
535 536
    globals()["softplus"],
    r"""
537 538 539 540 541 542 543 544 545 546 547
Examples:
    .. code-block:: python

        import paddle
        import paddle.nn.functional as F

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = F.softplus(x) 
        print(out)
        # [0.513015, 0.598139, 0.744397, 0.854355]

548 549
""",
)
550

551
add_sample_code(
552 553
    globals()["softsign"],
    r"""
554 555 556 557 558 559 560 561 562 563 564
Examples:
    .. code-block:: python

        import paddle
        import paddle.nn.functional as F

        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = F.softsign(x) 
        print(out)
        # [-0.285714, -0.166667, 0.0909091, 0.230769]

565 566
""",
)
567 568 569 570 571

_erf_ = generate_layer_fn('erf')


def erf(x, name=None):
572
    if in_dygraph_mode():
573
        return _C_ops.erf(x)
574

575 576 577 578 579 580 581 582 583 584
    locals_var = locals().copy()
    kwargs = dict()
    for name, val in locals_var.items():
        if val is not None:
            kwargs[name] = val
    return _erf_(**kwargs)


erf.__doc__ = r"""
:strong:`Erf Operator`
585
For more details, see `Error function <https://en.wikipedia.org/wiki/Error_function>`_.
586 587 588

Equation:
    ..  math::
589
        out = \frac{2}{\sqrt{\pi}} \int_{0}^{x}e^{- \eta^{2}}d\eta
590 591 592 593

Args:

    x (Tensor): The input tensor, it's data type should be float32, float64.
594
    name (str, optional): Name for the operation (optional, default is None). For more information, please refer to :ref:`api_guide_Name`.
595 596 597

Returns:

598
    Tensor: The output of Erf, dtype: float32 or float64, the same as the input, shape: the same as the input.
599 600 601 602 603 604

Examples:
    
    .. code-block:: python
    
        import paddle
605
        
606 607 608 609 610
        x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3])
        out = paddle.erf(x)
        print(out)
        # [-0.42839236 -0.22270259  0.11246292  0.32862676]
"""