Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
f33a92d6
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
404
Star
4705
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
f33a92d6
编写于
4月 03, 2020
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs(mge): fix api docs of loss and tranform
GitOrigin-RevId: 4d4d32b3c4536c3d1ba993405fdde6bc5065af5b
上级
fd83e025
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
60 addition
and
56 deletion
+60
-56
python_module/megengine/data/dataset/vision/imagenet.py
python_module/megengine/data/dataset/vision/imagenet.py
+12
-10
python_module/megengine/data/transform/vision/transform.py
python_module/megengine/data/transform/vision/transform.py
+19
-19
python_module/megengine/functional/loss.py
python_module/megengine/functional/loss.py
+29
-27
未找到文件。
python_module/megengine/data/dataset/vision/imagenet.py
浏览文件 @
f33a92d6
...
@@ -33,16 +33,18 @@ class ImageNet(ImageFolder):
...
@@ -33,16 +33,18 @@ class ImageNet(ImageFolder):
r
"""
r
"""
Load ImageNet from raw files or folder, expected folder looks like
Load ImageNet from raw files or folder, expected folder looks like
${root}/
.. code-block:: bash
| [REQUIRED TAR FILES]
|- ILSVRC2012_img_train.tar
${root}/
|- ILSVRC2012_img_val.tar
| [REQUIRED TAR FILES]
|- ILSVRC2012_devkit_t12.tar.gz
|- ILSVRC2012_img_train.tar
| [OPTIONAL IMAGE FOLDERS]
|- ILSVRC2012_img_val.tar
|- train/cls/xxx.${img_ext}
|- ILSVRC2012_devkit_t12.tar.gz
|- val/cls/xxx.${img_ext}
| [OPTIONAL IMAGE FOLDERS]
|- ILSVRC2012_devkit_t12/data/meta.mat
|- train/cls/xxx.${img_ext}
|- ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt
|- val/cls/xxx.${img_ext}
|- ILSVRC2012_devkit_t12/data/meta.mat
|- ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt
If the image folders don't exist, raw tar files are required to get extracted and processed.
If the image folders don't exist, raw tar files are required to get extracted and processed.
"""
"""
...
...
python_module/megengine/data/transform/vision/transform.py
浏览文件 @
f33a92d6
...
@@ -159,7 +159,7 @@ class ToMode(VisionTransform):
...
@@ -159,7 +159,7 @@ class ToMode(VisionTransform):
while the Neural Network might use CHW mode input tensor
while the Neural Network might use CHW mode input tensor
:param mode: Output mode of input. Use "CHW" mode by default.
:param mode: Output mode of input. Use "CHW" mode by default.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
mode
=
"CHW"
,
*
,
order
=
None
):
def
__init__
(
self
,
mode
=
"CHW"
,
*
,
order
=
None
):
...
@@ -185,14 +185,14 @@ class Compose(VisionTransform):
...
@@ -185,14 +185,14 @@ class Compose(VisionTransform):
r
"""
r
"""
Composes several transforms together.
Composes several transforms together.
:param transforms: List of
``VisionTransform`
` to compose.
:param transforms: List of
:class:`VisionTransform
` to compose.
:param batch_compose: Whether use shuffle_indices for batch data or not.
:param batch_compose: Whether use shuffle_indices for batch data or not.
If True, use original input sequence.
If True, use original input sequence.
Otherwise, the shuffle_indices will be used for transforms.
Otherwise, the shuffle_indices will be used for transforms.
:param shuffle_indices: Indices used for random shuffle, start at 1.
:param shuffle_indices: Indices used for random shuffle, start at 1.
For example, if shuffle_indices is [(1, 3), (2, 4)], then the 1st and 3rd transform
For example, if shuffle_indices is [(1, 3), (2, 4)], then the 1st and 3rd transform
will be random shuffled, the 2nd and 4th transform will also be shuffled.
will be random shuffled, the 2nd and 4th transform will also be shuffled.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
Example:
Example:
...
@@ -265,7 +265,7 @@ class TorchTransformCompose(VisionTransform):
...
@@ -265,7 +265,7 @@ class TorchTransformCompose(VisionTransform):
such as Normalize and ToTensor in torchvision.
such as Normalize and ToTensor in torchvision.
:param transforms: The same with ``Compose``
:param transforms: The same with ``Compose``
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
transforms
,
*
,
order
=
None
):
def
__init__
(
self
,
transforms
,
*
,
order
=
None
):
...
@@ -312,7 +312,7 @@ class Pad(VisionTransform):
...
@@ -312,7 +312,7 @@ class Pad(VisionTransform):
:param value: Padding value of image, could be a sequence of int or float.
:param value: Padding value of image, could be a sequence of int or float.
if it's float value, the dtype of image will be casted to float32 also.
if it's float value, the dtype of image will be casted to float32 also.
:param mask_value: Padding value of segmentation map.
:param mask_value: Padding value of segmentation map.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
size
=
0
,
value
=
0
,
mask_value
=
0
,
*
,
order
=
None
):
def
__init__
(
self
,
size
=
0
,
value
=
0
,
mask_value
=
0
,
*
,
order
=
None
):
...
@@ -358,7 +358,7 @@ class Resize(VisionTransform):
...
@@ -358,7 +358,7 @@ class Resize(VisionTransform):
* cv2.INTER_AREA – resampling using pixel area relation.
* cv2.INTER_AREA – resampling using pixel area relation.
* cv2.INTER_CUBIC – a bicubic interpolation over 4×4 pixel neighborhood.
* cv2.INTER_CUBIC – a bicubic interpolation over 4×4 pixel neighborhood.
* cv2.INTER_LANCZOS4 – a Lanczos interpolation over 8×8 pixel neighborhood.
* cv2.INTER_LANCZOS4 – a Lanczos interpolation over 8×8 pixel neighborhood.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
output_size
,
interpolation
=
cv2
.
INTER_LINEAR
,
*
,
order
=
None
):
def
__init__
(
self
,
output_size
,
interpolation
=
cv2
.
INTER_LINEAR
,
*
,
order
=
None
):
...
@@ -477,7 +477,7 @@ class RandomResize(VisionTransform):
...
@@ -477,7 +477,7 @@ class RandomResize(VisionTransform):
r
"""Resize the input data randomly.
r
"""Resize the input data randomly.
:param scale_range: .
:param scale_range: .
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
scale_range
,
interpolation
=
cv2
.
INTER_LINEAR
,
*
,
order
=
None
):
def
__init__
(
self
,
scale_range
,
interpolation
=
cv2
.
INTER_LINEAR
,
*
,
order
=
None
):
...
@@ -525,7 +525,7 @@ class RandomCrop(VisionTransform):
...
@@ -525,7 +525,7 @@ class RandomCrop(VisionTransform):
:param output_size: Target size of output image, with (height, width) shape.
:param output_size: Target size of output image, with (height, width) shape.
:param padding_size: The same with `size` in ``Pad``
:param padding_size: The same with `size` in ``Pad``
:param padding_value: The same with `value` in ``Pad``
:param padding_value: The same with `value` in ``Pad``
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
def
__init__
(
...
@@ -583,7 +583,7 @@ class RandomResizedCrop(VisionTransform):
...
@@ -583,7 +583,7 @@ class RandomResizedCrop(VisionTransform):
:param output_size: Target size of output image, with (height, width) shape.
:param output_size: Target size of output image, with (height, width) shape.
:param scale_range: Range of size of the origin size cropped. Default: (0.08, 1.0)
:param scale_range: Range of size of the origin size cropped. Default: (0.08, 1.0)
:param ratio_range: Range of aspect ratio of the origin aspect ratio cropped. Default: (0.75, 1.33)
:param ratio_range: Range of aspect ratio of the origin aspect ratio cropped. Default: (0.75, 1.33)
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
def
__init__
(
...
@@ -667,7 +667,7 @@ class CenterCrop(VisionTransform):
...
@@ -667,7 +667,7 @@ class CenterCrop(VisionTransform):
r
"""Crops the given the input data at the center.
r
"""Crops the given the input data at the center.
:param output_size: Target size of output image, with (height, width) shape.
:param output_size: Target size of output image, with (height, width) shape.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
output_size
,
*
,
order
=
None
):
def
__init__
(
self
,
output_size
,
*
,
order
=
None
):
...
@@ -710,7 +710,7 @@ class RandomHorizontalFlip(VisionTransform):
...
@@ -710,7 +710,7 @@ class RandomHorizontalFlip(VisionTransform):
r
"""Horizontally flip the input data randomly with a given probability.
r
"""Horizontally flip the input data randomly with a given probability.
:param p: probability of the input data being flipped. Default: 0.5
:param p: probability of the input data being flipped. Default: 0.5
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
prob
:
float
=
0.5
,
*
,
order
=
None
):
def
__init__
(
self
,
prob
:
float
=
0.5
,
*
,
order
=
None
):
...
@@ -742,7 +742,7 @@ class RandomVerticalFlip(VisionTransform):
...
@@ -742,7 +742,7 @@ class RandomVerticalFlip(VisionTransform):
r
"""Vertically flip the input data randomly with a given probability.
r
"""Vertically flip the input data randomly with a given probability.
:param p: probability of the input data being flipped. Default: 0.5
:param p: probability of the input data being flipped. Default: 0.5
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
prob
:
float
=
0.5
,
*
,
order
=
None
):
def
__init__
(
self
,
prob
:
float
=
0.5
,
*
,
order
=
None
):
...
@@ -778,7 +778,7 @@ class Normalize(VisionTransform):
...
@@ -778,7 +778,7 @@ class Normalize(VisionTransform):
:param mean: Sequence of means for each channel.
:param mean: Sequence of means for each channel.
:param std: Sequence of standard deviations for each channel.
:param std: Sequence of standard deviations for each channel.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
mean
=
0.0
,
std
=
1.0
,
*
,
order
=
None
):
def
__init__
(
self
,
mean
=
0.0
,
std
=
1.0
,
*
,
order
=
None
):
...
@@ -802,7 +802,7 @@ class GaussianNoise(VisionTransform):
...
@@ -802,7 +802,7 @@ class GaussianNoise(VisionTransform):
:param mean: Gaussian mean used to generate noise.
:param mean: Gaussian mean used to generate noise.
:param std: Gaussian standard deviation used to generate noise.
:param std: Gaussian standard deviation used to generate noise.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
mean
=
0.0
,
std
=
1.0
,
*
,
order
=
None
):
def
__init__
(
self
,
mean
=
0.0
,
std
=
1.0
,
*
,
order
=
None
):
...
@@ -828,7 +828,7 @@ class BrightnessTransform(VisionTransform):
...
@@ -828,7 +828,7 @@ class BrightnessTransform(VisionTransform):
:param value: How much to adjust the brightness. Can be any
:param value: How much to adjust the brightness. Can be any
non negative number. 0 gives the original image
non negative number. 0 gives the original image
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
value
,
*
,
order
=
None
):
def
__init__
(
self
,
value
,
*
,
order
=
None
):
...
@@ -859,7 +859,7 @@ class ContrastTransform(VisionTransform):
...
@@ -859,7 +859,7 @@ class ContrastTransform(VisionTransform):
:param value: How much to adjust the contrast. Can be any
:param value: How much to adjust the contrast. Can be any
non negative number. 0 gives the original image
non negative number. 0 gives the original image
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
value
,
*
,
order
=
None
):
def
__init__
(
self
,
value
,
*
,
order
=
None
):
...
@@ -890,7 +890,7 @@ class SaturationTransform(VisionTransform):
...
@@ -890,7 +890,7 @@ class SaturationTransform(VisionTransform):
:param value: How much to adjust the saturation. Can be any
:param value: How much to adjust the saturation. Can be any
non negative number. 0 gives the original image
non negative number. 0 gives the original image
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
value
,
*
,
order
=
None
):
def
__init__
(
self
,
value
,
*
,
order
=
None
):
...
@@ -921,7 +921,7 @@ class HueTransform(VisionTransform):
...
@@ -921,7 +921,7 @@ class HueTransform(VisionTransform):
:param value: How much to adjust the hue. Can be any number
:param value: How much to adjust the hue. Can be any number
between 0 and 0.5, 0 gives the original image
between 0 and 0.5, 0 gives the original image
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
value
,
*
,
order
=
None
):
def
__init__
(
self
,
value
,
*
,
order
=
None
):
...
@@ -969,7 +969,7 @@ class ColorJitter(VisionTransform):
...
@@ -969,7 +969,7 @@ class ColorJitter(VisionTransform):
:param hue: How much to jitter hue.
:param hue: How much to jitter hue.
Chosen uniformly from [-hue, hue] or the given [min, max].
Chosen uniformly from [-hue, hue] or the given [min, max].
Should have 0<= hue <= 0.5 or -0.5 <= min <= max <= 0.5.
Should have 0<= hue <= 0.5 or -0.5 <= min <= max <= 0.5.
:param order: The same with
``VisionTransform`
`
:param order: The same with
:class:`VisionTransform
`
"""
"""
def
__init__
(
self
,
brightness
=
0
,
contrast
=
0
,
saturation
=
0
,
hue
=
0
,
*
,
order
=
None
):
def
__init__
(
self
,
brightness
=
0
,
contrast
=
0
,
saturation
=
0
,
hue
=
0
,
*
,
order
=
None
):
...
...
python_module/megengine/functional/loss.py
浏览文件 @
f33a92d6
...
@@ -21,12 +21,12 @@ def l1_loss(pred: Tensor, label: Tensor) -> Tensor:
...
@@ -21,12 +21,12 @@ def l1_loss(pred: Tensor, label: Tensor) -> Tensor:
The mean absolute error can be described as:
The mean absolute error can be described as:
.. math::
.. math:: \ell(x,y) = mean\left(L \right)
\ell(x,y) = mean\left(L \right)
where
where
.. math::
.. math::
L = \{l_1,\dots,l_N\}, \quad
L = \{l_1,\dots,l_N\}, \quad
l_n = \left| x_n - y_n \right|,
l_n = \left| x_n - y_n \right|,
...
@@ -36,11 +36,6 @@ def l1_loss(pred: Tensor, label: Tensor) -> Tensor:
...
@@ -36,11 +36,6 @@ def l1_loss(pred: Tensor, label: Tensor) -> Tensor:
:param pred: The predicted result from model.
:param pred: The predicted result from model.
:param label: The ground truth to compare.
:param label: The ground truth to compare.
Shape:
- pred: :math:`(N, *)` where :math:`*` means any number of additional
dimensions
- label: :math:`(N, *)`. Same shape as ``pred``
Examples:
Examples:
.. testcode::
.. testcode::
...
@@ -72,12 +67,12 @@ def square_loss(pred: Tensor, label: Tensor) -> Tensor:
...
@@ -72,12 +67,12 @@ def square_loss(pred: Tensor, label: Tensor) -> Tensor:
The mean squared error can be described as:
The mean squared error can be described as:
.. math::
.. math:: \ell(x, y) = mean\left( L \right)
\ell(x, y) = mean\left( L \right)
where
where
.. math::
.. math::
L = \{l_1,\dots,l_N\}, \quad
L = \{l_1,\dots,l_N\}, \quad
l_n = \left( x_n - y_n \right)^2,
l_n = \left( x_n - y_n \right)^2,
...
@@ -100,10 +95,10 @@ def square_loss(pred: Tensor, label: Tensor) -> Tensor:
...
@@ -100,10 +95,10 @@ def square_loss(pred: Tensor, label: Tensor) -> Tensor:
def
cross_entropy
(
def
cross_entropy
(
inp
:
Tensor
,
target
:
Tensor
,
axis
:
int
=
1
,
ignore_index
:
int
=
-
1
inp
:
Tensor
,
target
:
Tensor
,
axis
:
int
=
1
,
ignore_index
:
int
=
-
1
)
->
Tensor
:
)
->
Tensor
:
r
"""Returns the cross entropy loss in a classification problem.
r
"""
Returns the cross entropy loss in a classification problem.
.. math::
.. math:: \textrm{CrossEntropy}(x, y) = - \sum_{i} y_i\log(x_i)
\textrm{CrossEntropy}(x, y) = - \sum_{i} y_i\log(x_i)
:param inp: The input tensor representing the predicted probability.
:param inp: The input tensor representing the predicted probability.
:param label: The input tensor representing the classification label.
:param label: The input tensor representing the classification label.
...
@@ -118,17 +113,19 @@ def cross_entropy(
...
@@ -118,17 +113,19 @@ def cross_entropy(
from megengine import tensor
from megengine import tensor
import megengine.functional as F
import megengine.functional as F
data_shape = (1, 2)
data_shape = (1, 2)
label_shape = (1, )
label_shape = (1, )
pred = tensor(
pred = tensor(np.array([0.5, 0.5], dtype=np.float32).reshape(data_shape))
np.array([0.5, 0.5], dtype=np.float32).reshape(data_shape)
label = tensor(np.ones(label_shape, dtype=np.int32))
)
label = tensor(
np.ones(label_shape, dtype=np.int32)
)
loss = F.cross_entropy(pred, label)
loss = F.cross_entropy(pred, label)
print(loss.numpy())
Outputs:
.. testoutput::
[0.69]
"""
"""
n0
=
inp
.
ndim
n0
=
inp
.
ndim
...
@@ -157,8 +154,7 @@ def cross_entropy_with_softmax(
...
@@ -157,8 +154,7 @@ def cross_entropy_with_softmax(
When using label smoothing, the label distribution is as follows:
When using label smoothing, the label distribution is as follows:
.. math::
.. math:: y^{LS}_{k}=y_{k}\left(1-\alpha\right)+\alpha/K
y^{LS}_{k}=y_{k}\left(1-\alpha\right)+\alpha/K
where :math:`y^{LS}` and :math:`y` are new label distribution and origin label distribution respectively.
where :math:`y^{LS}` and :math:`y` are new label distribution and origin label distribution respectively.
k is the index of label distribution. :math:`\alpha` is label_smooth and :math:`K` is the number of classes.
k is the index of label distribution. :math:`\alpha` is label_smooth and :math:`K` is the number of classes.
...
@@ -199,6 +195,7 @@ def triplet_margin_loss(
...
@@ -199,6 +195,7 @@ def triplet_margin_loss(
Creates a criterion that measures the triplet loss given an input tensors.
Creates a criterion that measures the triplet loss given an input tensors.
.. math::
.. math::
L(a, p, n) = max\left\{d\left(a_{i},p_{i}\right)-d\left(a_{i}, n_{i}\right)+margin, 0\right\},\
L(a, p, n) = max\left\{d\left(a_{i},p_{i}\right)-d\left(a_{i}, n_{i}\right)+margin, 0\right\},\
d\left(x_{i},y_{i}\right)=\left\|x_{i}-y_{i}\right\|_{p}
d\left(x_{i},y_{i}\right)=\left\|x_{i}-y_{i}\right\|_{p}
...
@@ -256,18 +253,16 @@ def nll_loss(
...
@@ -256,18 +253,16 @@ def nll_loss(
r
"""
r
"""
The negative log likelihood loss.
The negative log likelihood loss.
Shape:
:param pred: The predicted result from model.
- pred: :math:`(N, *)` where :math:`*` means any number of additional
:param label: The ground truth to compare.
dimensions
- label: :math:`(N, *)`. Same shape as ``pred``
Examples:
Examples:
.. testcode::
.. testcode::
import numpy as np
import numpy as np
from megengine import tensor
from megengine import tensor
import megengine.functional as F
import megengine.functional as F
from megengine.test.utils import assertTensorClose
data_shape = (2, 2)
data_shape = (2, 2)
label_shape = (2, )
label_shape = (2, )
...
@@ -280,7 +275,14 @@ def nll_loss(
...
@@ -280,7 +275,14 @@ def nll_loss(
pred = F.log(F.softmax(data))
pred = F.log(F.softmax(data))
loss1 = F.nll_loss(pred, label)
loss1 = F.nll_loss(pred, label)
loss2 = F.cross_entropy_with_softmax(data, label)
loss2 = F.cross_entropy_with_softmax(data, label)
assertTensorClose(loss1.numpy(), loss2.numpy(), max_err=5e-6)
print(loss1.numpy(), loss2.numpy())
Outputs:
.. testoutput::
[0.6576154] [0.6576154]
"""
"""
n0
=
pred
.
ndim
n0
=
pred
.
ndim
n1
=
label
.
ndim
n1
=
label
.
ndim
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录