提交 dfc7e29f 编写于 作者: A Aston Zhang 提交者: Mu Li

zeng qiang -> zeng guang (#103)

上级 f4d884d6
# 图片增
# 图片增广
AlexNet当年能取得巨大的成功,其中图片增强功不可没。图片增强通过一系列的随机变化生成大量“新”的样本,从而减低过拟合的可能。现在在深度卷积神经网络训练中,图片增强是必不可少的一部分。
AlexNet当年能取得巨大的成功,其中图片增广功不可没。图片增广通过一系列的随机变化生成大量“新”的样本,从而减低过拟合的可能。现在在深度卷积神经网络训练中,图片增广是必不可少的一部分。
## 常用增方法
## 常用增广方法
我们首先读取一张$400\times 500$的图片作为样例
......@@ -15,7 +15,7 @@ img = image.imdecode(open('../img/cat1.jpg', 'rb').read())
plt.imshow(img.asnumpy())
```
接下来我们定义一个辅助函数,给定输入图片`img`的增方法`aug`,它会运行多次并画出结果。
接下来我们定义一个辅助函数,给定输入图片`img`的增广方法`aug`,它会运行多次并画出结果。
```{.python .input n=2}
from mxnet import nd
......@@ -36,7 +36,7 @@ def apply(img, aug, n=3):
### 变形
水平方向翻转图片是最早也是最广泛使用的一种增
水平方向翻转图片是最早也是最广泛使用的一种增广
```{.python .input n=3}
# 以.5的概率做翻转
......@@ -44,7 +44,7 @@ aug = image.HorizontalFlipAug(.5)
apply(img, aug)
```
样例图片里我们关心的猫在图片正中间,但一般情况下可能不是这样。前面我们提到池化层能弱化卷积层对目标位置的敏感度,但也不能完全解决这个问题。一个常用增方法是随机的截取其中的一块。
样例图片里我们关心的猫在图片正中间,但一般情况下可能不是这样。前面我们提到池化层能弱化卷积层对目标位置的敏感度,但也不能完全解决这个问题。一个常用增广方法是随机的截取其中的一块。
注意到随机截取一般会缩小输入的形状。如果原始输入图片过小,导致没有太多空间进行随机裁剪,通常做法是先将其放大的足够大的尺寸。所以如果你的原始图片足够大,建议不要事先将它们裁到网络需要的大小。
......@@ -81,13 +81,13 @@ apply(img, aug)
## 如何使用
通常使用时我们会将数个增强方法一起使用。注意到图片增强通常只是针对训练数据,对于测试数据则用得较小。后者常用的是做5次随机剪裁,然后讲5张图片的预测结果做均值。
通常使用时我们会将数个增广方法一起使用。注意到图片增广通常只是针对训练数据,对于测试数据则用得较小。后者常用的是做5次随机剪裁,然后讲5张图片的预测结果做均值。
下面我们使用CIFAR10来演示图片增强对训练的影响。我们这里不使用前面一直用的FashionMNIST,这是因为这个数据的图片基本已经对齐好了,而且是黑白图片,所以不管是变形还是变色增强效果都不会明显。
下面我们使用CIFAR10来演示图片增广对训练的影响。我们这里不使用前面一直用的FashionMNIST,这是因为这个数据的图片基本已经对齐好了,而且是黑白图片,所以不管是变形还是变色增广效果都不会明显。
### 数据读取
我们首先定义一个辅助函数可以对图片按顺序应用数个增
我们首先定义一个辅助函数可以对图片按顺序应用数个增广
```{.python .input n=8}
def apply_aug_list(img, augs):
......@@ -109,7 +109,7 @@ test_augs = [
]
```
然后定义数据读取,这里跟前面的FashionMNIST类似,但在`transform`中加入了图片增
然后定义数据读取,这里跟前面的FashionMNIST类似,但在`transform`中加入了图片增广
```{.python .input n=10}
from mxnet import gluon
......@@ -179,27 +179,27 @@ def train(train_augs, test_augs, learning_rate=.1):
train_data, test_data, net, loss, trainer, ctx, num_epochs)
```
使用增
使用增广
```{.python .input n=14}
train(train_augs, test_augs)
```
不使用增
不使用增广
```{.python .input n=15}
train(test_augs, test_augs)
```
可以看到使用增后,训练精度提升更慢,但测试精度比不使用更好。
可以看到使用增广后,训练精度提升更慢,但测试精度比不使用更好。
## 总结
图片增可以有效避免过拟合。
图片增广可以有效避免过拟合。
## 练习
尝试换不同的增方法试试。
尝试换不同的增广方法试试。
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/1666)
......@@ -141,7 +141,7 @@ reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir, valid_r
## 使用Gluon读取整理后的数据集
为避免过拟合,我们在这里使用`image.CreateAugmenter`加强数据集。例如我们设`rand_mirror=True`即可随机对每张图片做镜面反转。我们也通过`mean``std`对彩色图像RGB三个通道分别做[标准化](../chapter_supervised-learning/kaggle-gluon-kfold.md)。以下我们列举了该函数里的所有参数,这些参数都是可以调的。
为避免过拟合,我们在这里使用`image.CreateAugmenter`增广数据集。例如我们设`rand_mirror=True`即可随机对每张图片做镜面反转。我们也通过`mean``std`对彩色图像RGB三个通道分别做[标准化](../chapter_supervised-learning/kaggle-gluon-kfold.md)。以下我们列举了该函数里的所有参数,这些参数都是可以调的。
```{.python .input n=4}
from mxnet import autograd
......
......@@ -137,7 +137,7 @@ else:
## 使用Gluon读取整理后的数据集
为避免过拟合,我们在这里使用`image.CreateAugmenter`加强数据集。例如我们设`rand_mirror=True`即可随机对每张图片做镜面反转。以下我们列举了该函数里的所有参数,这些参数都是可以调的。
为避免过拟合,我们在这里使用`image.CreateAugmenter`增广数据集。例如我们设`rand_mirror=True`即可随机对每张图片做镜面反转。以下我们列举了该函数里的所有参数,这些参数都是可以调的。
```{.python .input n=4}
from mxnet import autograd
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册