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):
r
"""
Load ImageNet from raw files or folder, expected folder looks like
${root}/
| [REQUIRED TAR FILES]
|- ILSVRC2012_img_train.tar
|- ILSVRC2012_img_val.tar
|- ILSVRC2012_devkit_t12.tar.gz
| [OPTIONAL IMAGE FOLDERS]
|- train/cls/xxx.${img_ext}
|- val/cls/xxx.${img_ext}
|- ILSVRC2012_devkit_t12/data/meta.mat
|- ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt
.. code-block:: bash
${root}/
| [REQUIRED TAR FILES]
|- ILSVRC2012_img_train.tar
|- ILSVRC2012_img_val.tar
|- ILSVRC2012_devkit_t12.tar.gz
| [OPTIONAL IMAGE FOLDERS]
|- train/cls/xxx.${img_ext}
|- 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.
"""
...
...
python_module/megengine/data/transform/vision/transform.py
浏览文件 @
f33a92d6
...
...
@@ -159,7 +159,7 @@ class ToMode(VisionTransform):
while the Neural Network might use CHW mode input tensor
: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
):
...
...
@@ -185,14 +185,14 @@ class Compose(VisionTransform):
r
"""
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.
If True, use original input sequence.
Otherwise, the shuffle_indices will be used for transforms.
: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
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:
...
...
@@ -265,7 +265,7 @@ class TorchTransformCompose(VisionTransform):
such as Normalize and ToTensor in torchvision.
: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
):
...
...
@@ -312,7 +312,7 @@ class Pad(VisionTransform):
: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.
: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
):
...
...
@@ -358,7 +358,7 @@ class Resize(VisionTransform):
* cv2.INTER_AREA – resampling using pixel area relation.
* cv2.INTER_CUBIC – a bicubic interpolation over 4×4 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
):
...
...
@@ -477,7 +477,7 @@ class RandomResize(VisionTransform):
r
"""Resize the input data randomly.
: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
):
...
...
@@ -525,7 +525,7 @@ class RandomCrop(VisionTransform):
:param output_size: Target size of output image, with (height, width) shape.
:param padding_size: The same with `size` 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__
(
...
...
@@ -583,7 +583,7 @@ class RandomResizedCrop(VisionTransform):
: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 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__
(
...
...
@@ -667,7 +667,7 @@ class CenterCrop(VisionTransform):
r
"""Crops the given the input data at the center.
: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
):
...
...
@@ -710,7 +710,7 @@ class RandomHorizontalFlip(VisionTransform):
r
"""Horizontally flip the input data randomly with a given probability.
: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
):
...
...
@@ -742,7 +742,7 @@ class RandomVerticalFlip(VisionTransform):
r
"""Vertically flip the input data randomly with a given probability.
: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
):
...
...
@@ -778,7 +778,7 @@ class Normalize(VisionTransform):
:param mean: Sequence of means 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
):
...
...
@@ -802,7 +802,7 @@ class GaussianNoise(VisionTransform):
:param mean: Gaussian mean 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
):
...
...
@@ -828,7 +828,7 @@ class BrightnessTransform(VisionTransform):
:param value: How much to adjust the brightness. Can be any
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
):
...
...
@@ -859,7 +859,7 @@ class ContrastTransform(VisionTransform):
:param value: How much to adjust the contrast. Can be any
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
):
...
...
@@ -890,7 +890,7 @@ class SaturationTransform(VisionTransform):
:param value: How much to adjust the saturation. Can be any
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
):
...
...
@@ -921,7 +921,7 @@ class HueTransform(VisionTransform):
:param value: How much to adjust the hue. Can be any number
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
):
...
...
@@ -969,7 +969,7 @@ class ColorJitter(VisionTransform):
:param hue: How much to jitter hue.
Chosen uniformly from [-hue, hue] or the given [min, max].
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
):
...
...
python_module/megengine/functional/loss.py
浏览文件 @
f33a92d6
...
...
@@ -21,12 +21,12 @@ def l1_loss(pred: Tensor, label: Tensor) -> Tensor:
The mean absolute error can be described as:
.. math::
\ell(x,y) = mean\left(L \right)
.. math:: \ell(x,y) = mean\left(L \right)
where
.. math::
L = \{l_1,\dots,l_N\}, \quad
l_n = \left| x_n - y_n \right|,
...
...
@@ -36,11 +36,6 @@ def l1_loss(pred: Tensor, label: Tensor) -> Tensor:
:param pred: The predicted result from model.
: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:
.. testcode::
...
...
@@ -72,12 +67,12 @@ def square_loss(pred: Tensor, label: Tensor) -> Tensor:
The mean squared error can be described as:
.. math::
\ell(x, y) = mean\left( L \right)
.. math:: \ell(x, y) = mean\left( L \right)
where
.. math::
L = \{l_1,\dots,l_N\}, \quad
l_n = \left( x_n - y_n \right)^2,
...
...
@@ -100,10 +95,10 @@ def square_loss(pred: Tensor, label: Tensor) -> Tensor:
def
cross_entropy
(
inp
:
Tensor
,
target
:
Tensor
,
axis
:
int
=
1
,
ignore_index
:
int
=
-
1
)
->
Tensor
:
r
"""Returns the cross entropy loss in a classification problem.
r
"""
Returns the cross entropy loss in a classification problem.
.. math::
\textrm{CrossEntropy}(x, y) = - \sum_{i} y_i\log(x_i)
.. math:: \textrm{CrossEntropy}(x, y) = - \sum_{i} y_i\log(x_i)
:param inp: The input tensor representing the predicted probability.
:param label: The input tensor representing the classification label.
...
...
@@ -118,17 +113,19 @@ def cross_entropy(
from megengine import tensor
import megengine.functional as F
data_shape = (1, 2)
label_shape = (1, )
pred = tensor(
np.array([0.5, 0.5], dtype=np.float32).reshape(data_shape)
)
label = tensor(
np.ones(label_shape, dtype=np.int32)
)
pred = tensor(np.array([0.5, 0.5], dtype=np.float32).reshape(data_shape))
label = tensor(np.ones(label_shape, dtype=np.int32))
loss = F.cross_entropy(pred, label)
print(loss.numpy())
Outputs:
.. testoutput::
[0.69]
"""
n0
=
inp
.
ndim
...
...
@@ -157,8 +154,7 @@ def cross_entropy_with_softmax(
When using label smoothing, the label distribution is as follows:
.. math::
y^{LS}_{k}=y_{k}\left(1-\alpha\right)+\alpha/K
.. math:: 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.
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(
Creates a criterion that measures the triplet loss given an input tensors.
.. math::
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}
...
...
@@ -256,18 +253,16 @@ def nll_loss(
r
"""
The negative log likelihood loss.
Shape:
- pred: :math:`(N, *)` where :math:`*` means any number of additional
dimensions
- label: :math:`(N, *)`. Same shape as ``pred``
:param pred: The predicted result from model.
:param label: The ground truth to compare.
Examples:
.. testcode::
import numpy as np
from megengine import tensor
import megengine.functional as F
from megengine.test.utils import assertTensorClose
data_shape = (2, 2)
label_shape = (2, )
...
...
@@ -280,7 +275,14 @@ def nll_loss(
pred = F.log(F.softmax(data))
loss1 = F.nll_loss(pred, 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
n1
=
label
.
ndim
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录