Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
939a873b
D
d2l-zh
项目概览
OpenDocCN
/
d2l-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
939a873b
编写于
6月 26, 2018
作者:
A
Aston Zhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add kaggle dog, revise other kaggles
上级
7c249f28
变更
4
展开全部
显示空白变更内容
内联
并排
Showing
4 changed file
with
84 addition
and
112 deletion
+84
-112
chapter_computer-vision/image-augmentation.md
chapter_computer-vision/image-augmentation.md
+7
-6
chapter_computer-vision/kaggle-gluon-cifar10.md
chapter_computer-vision/kaggle-gluon-cifar10.md
+16
-15
chapter_computer-vision/kaggle-gluon-dog.md
chapter_computer-vision/kaggle-gluon-dog.md
+60
-90
chapter_supervised-learning/kaggle-gluon-kfold.md
chapter_supervised-learning/kaggle-gluon-kfold.md
+1
-1
未找到文件。
chapter_computer-vision/image-augmentation.md
浏览文件 @
939a873b
...
@@ -48,7 +48,7 @@ apply(img, transforms.RandomFlipTopBottom())
...
@@ -48,7 +48,7 @@ apply(img, transforms.RandomFlipTopBottom())
```
{.python .input n=5}
```
{.python .input n=5}
shape_aug = transforms.RandomResizedCrop(
shape_aug = transforms.RandomResizedCrop(
(200, 200), scale=(
.1, 1), ratio=(
.5, 2))
(200, 200), scale=(
0.1, 1), ratio=(0
.5, 2))
apply(img, shape_aug)
apply(img, shape_aug)
```
```
...
@@ -57,20 +57,20 @@ apply(img, shape_aug)
...
@@ -57,20 +57,20 @@ apply(img, shape_aug)
形状变化外的一个另一大类是变化颜色。颜色一般有四个可以调的参数:亮度、对比、饱和度和色相。下面例子里我们随机将亮度在当前值上增加或减小一个在0到50%之前的量。
形状变化外的一个另一大类是变化颜色。颜色一般有四个可以调的参数:亮度、对比、饱和度和色相。下面例子里我们随机将亮度在当前值上增加或减小一个在0到50%之前的量。
```
{.python .input n=6}
```
{.python .input n=6}
apply(img, transforms.Random
Lighting(
.5))
apply(img, transforms.Random
Brightness(0
.5))
```
```
同样的修改色相。
同样的修改色相。
```
{.python .input n=7}
```
{.python .input n=7}
apply(img, transforms.RandomHue(.5))
apply(img, transforms.RandomHue(
0
.5))
```
```
或者用使用
`RandomColorJitter`
来一起使用。
或者用使用
`RandomColorJitter`
来一起使用。
```
{.python .input n=8}
```
{.python .input n=8}
color_aug = transforms.RandomColorJitter(
color_aug = transforms.RandomColorJitter(
brightness=
.5, contrast=.5, saturation=.5, hue=
.5)
brightness=
0.5, contrast=0.5, saturation=0.5, hue=0
.5)
apply(img, color_aug)
apply(img, color_aug)
```
```
...
@@ -89,7 +89,8 @@ apply(img, augs)
...
@@ -89,7 +89,8 @@ apply(img, augs)
接下来我们来看一个将图片增广应用在实际训练的例子,并比较其与不使用时的区别。这里我们使用CIFAR-10数据集,而不是之前我们一直使用的FashionMNIST。原因在于FashionMNIST中物体位置和尺寸都已经统一化了,而CIFAR-10中物体颜色和大小区别更加显著。下面我们展示CIFAR-10中的前32张训练图片。
接下来我们来看一个将图片增广应用在实际训练的例子,并比较其与不使用时的区别。这里我们使用CIFAR-10数据集,而不是之前我们一直使用的FashionMNIST。原因在于FashionMNIST中物体位置和尺寸都已经统一化了,而CIFAR-10中物体颜色和大小区别更加显著。下面我们展示CIFAR-10中的前32张训练图片。
```
{.python .input n=10}
```
{.python .input n=10}
gb.show_images(gluon.data.vision.CIFAR10(train=True)[0:32][0], 4, 8, scale=0.8)
gb.show_images(gluon.data.vision.CIFAR10(train=True)[0:32][0], 4, 8,
scale=0.8);
```
```
在训练时,我们通常将图片增广作用在训练图片上,使得模型能识别出各种变化过后的版本。这里我们仅仅使用最简单的随机水平翻转。此外我们使用
`ToTensor`
变换来图片转成MXNet需要的格式,即格式为(批量,通道,高,宽)以及类型为32位浮点数。
在训练时,我们通常将图片增广作用在训练图片上,使得模型能识别出各种变化过后的版本。这里我们仅仅使用最简单的随机水平翻转。此外我们使用
`ToTensor`
变换来图片转成MXNet需要的格式,即格式为(批量,通道,高,宽)以及类型为32位浮点数。
...
@@ -119,7 +120,7 @@ def load_cifar10(is_train, augs, batch_size):
...
@@ -119,7 +120,7 @@ def load_cifar10(is_train, augs, batch_size):
我们使用ResNet 18来训练CIFAR-10。训练的的代码跟
[
“残差网络:ResNet”
](
..//chapter_convolutional-neural-networks/resnet.md
)
一致,除了使用所有可用的GPU和不同的学习率外。
我们使用ResNet 18来训练CIFAR-10。训练的的代码跟
[
“残差网络:ResNet”
](
..//chapter_convolutional-neural-networks/resnet.md
)
一致,除了使用所有可用的GPU和不同的学习率外。
```
{.python .input n=13}
```
{.python .input n=13}
def train(train_augs, test_augs, lr=.1):
def train(train_augs, test_augs, lr=
0
.1):
batch_size = 256
batch_size = 256
ctx = gb.try_all_gpus()
ctx = gb.try_all_gpus()
net = gb.resnet18(10)
net = gb.resnet18(10)
...
...
chapter_computer-vision/kaggle-gluon-cifar10.md
浏览文件 @
939a873b
...
@@ -29,7 +29,7 @@ import shutil
...
@@ -29,7 +29,7 @@ import shutil
## 获取数据集
## 获取数据集
比赛数据分为训练数据集和测试数据集。训练集包含5万张图片。测试集包含30万张图片:其中有1万张图片用来计分,其他29万张不计分的图片是为了防止人工标注测试集。两个数据集中的图片格式都是png,高和宽均为32,并含有RGB三个通道(彩色)。图片的类别数为10,类别分别为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车,如图9.X所示。
比赛数据分为训练数据集和测试数据集。训练集包含5万张图片。测试集包含30万张图片:其中有1万张图片用来计分,其他29万张不计分的图片是为了防止人工标注测试集。两个数据集中的图片格式都是png,高和宽均为32
像素
,并含有RGB三个通道(彩色)。图片的类别数为10,类别分别为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车,如图9.X所示。
![
CIFAR-10图像的类别分别为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。
](
../img/cifar10.png
)
![
CIFAR-10图像的类别分别为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。
](
../img/cifar10.png
)
...
@@ -47,7 +47,7 @@ import shutil
...
@@ -47,7 +47,7 @@ import shutil
*
../data/kaggle_cifar10/test/[1-300000].png
*
../data/kaggle_cifar10/test/[1-300000].png
*
../data/kaggle_cifar10/trainLabels.csv
*
../data/kaggle_cifar10/trainLabels.csv
为方便快速上手,我们提供了上述数据集的小规模采样,例如仅含100个训练样本的“train_tiny.zip”和1个测试样本的“test_tiny.zip”。它们解压后的文件夹名称分别为“train_tiny”和“test_tiny”。此外,训练数据集标签的压缩文件解压后得到“trainLabels.csv”。如果你将使用上述
的Kaggle比赛
完整数据集,还需要把下面
`demo`
变量改为
`False`
。
为方便快速上手,我们提供了上述数据集的小规模采样,例如仅含100个训练样本的“train_tiny.zip”和1个测试样本的“test_tiny.zip”。它们解压后的文件夹名称分别为“train_tiny”和“test_tiny”。此外,训练数据集标签的压缩文件解压后得到“trainLabels.csv”。如果你将使用上述
Kaggle比赛的
完整数据集,还需要把下面
`demo`
变量改为
`False`
。
```
{.python .input}
```
{.python .input}
# 如果使用下载的 Kaggle 比赛的完整数据集,把下面改为 False。
# 如果使用下载的 Kaggle 比赛的完整数据集,把下面改为 False。
...
@@ -61,7 +61,7 @@ if demo:
...
@@ -61,7 +61,7 @@ if demo:
### 整理数据集
### 整理数据集
我们定义下面的
`reorg_cifar10_data`
函数来整理数据集。整理后,同一类图片将被放在同一个文件夹下,便于我们稍后读取。该函数中的参数
`valid_ratio`
是验证集
占原始训练集的比重。以
`valid_ratio=0.1`
为例,由于原始训练数据
有50,000张图片,调参时将有45,000张图片用于训练并存放在路径“
`input_dir`
/train”,而另外5,000张图片为验证集并存放在路径“
`input_dir`
/valid”。
我们定义下面的
`reorg_cifar10_data`
函数来整理数据集。整理后,同一类图片将被放在同一个文件夹下,便于我们稍后读取。该函数中的参数
`valid_ratio`
是验证集
样本数与原始训练集样本数之比。以
`valid_ratio=0.1`
为例,由于原始训练数据集
有50,000张图片,调参时将有45,000张图片用于训练并存放在路径“
`input_dir`
/train”,而另外5,000张图片为验证集并存放在路径“
`input_dir`
/valid”。
```
{.python .input n=2}
```
{.python .input n=2}
def reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir,
def reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir,
...
@@ -112,11 +112,11 @@ def reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir,
...
@@ -112,11 +112,11 @@ def reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir,
```
{.python .input n=3}
```
{.python .input n=3}
if demo:
if demo:
# 注意:此处使用小训练集。
Kaggle 比赛的完整数据集应包括 5 万训练样本。
# 注意:此处使用小训练集。
train_dir = 'train_tiny'
train_dir = 'train_tiny'
# 注意:此处使用小测试集。
Kaggle 比赛的完整数据集应包括 30 万测试样本。
# 注意:此处使用小测试集。
test_dir = 'test_tiny'
test_dir = 'test_tiny'
# 注意:此处
相应使用小批量。使用 Kaggle 比赛的完整数据集时可设较大的
整数。
# 注意:此处
将批量大小相应设小。使用 Kaggle 比赛的完整数据集时可设较大
整数。
batch_size = 1
batch_size = 1
else:
else:
train_dir = 'train'
train_dir = 'train'
...
@@ -131,18 +131,20 @@ reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir,
...
@@ -131,18 +131,20 @@ reorg_cifar10_data(data_dir, label_file, train_dir, test_dir, input_dir,
valid_ratio)
valid_ratio)
```
```
##
增广数据
##
图片增广
为应对过拟合,我们在这里使用
`transforms`
来增广数据。例如,加入
`transforms.RandomFlipLeftRight()`
即可随机对图片做镜面反转。我们也通过
`transforms.Normalize()`
对彩色图像RGB三个通道分别做标准化。以下列举了部分操作。这些操作可以根据需求来决定是否使用
,它们的超参数也都是可调的
。
为应对过拟合,我们在这里使用
`transforms`
来增广数据。例如,加入
`transforms.RandomFlipLeftRight()`
即可随机对图片做镜面反转。我们也通过
`transforms.Normalize()`
对彩色图像RGB三个通道分别做标准化。以下列举了部分操作。这些操作可以根据需求来决定是否使用
或修改
。
```
{.python .input n=4}
```
{.python .input n=4}
transform_train = transforms.Compose([
transform_train = transforms.Compose([
# 随机按照 scale 和 ratio 裁剪,并放缩为 32 x 32 的正方形。
# 将图片放大成高和宽各为 40 像素的正方形。
transforms.RandomResizedCrop(32, scale=(0.08, 1.0),
transforms.Resize(40),
ratio=(3.0/4.0, 4.0/3.0)),
# 随机对高和宽各为 40 像素的正方形图片裁剪出面积为原图片面积 0.64 到 1 倍之间的小正方
# 形,再放缩为高和宽各为 32 像素的正方形。
transforms.RandomResizedCrop(32, scale=(0.64, 1.0), ratio=(1.0, 1.0)),
# 随机左右翻转图片。
# 随机左右翻转图片。
transforms.RandomFlipLeftRight(),
transforms.RandomFlipLeftRight(),
# 将图片像素值
缩小到(0, 1)内
,并将数据格式从“高*宽*通道”改为“通道*高*宽”。
# 将图片像素值
按比例缩小到 0 和 1 之间
,并将数据格式从“高*宽*通道”改为“通道*高*宽”。
transforms.ToTensor(),
transforms.ToTensor(),
# 对图片的每个通道做标准化。
# 对图片的每个通道做标准化。
transforms.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010])
transforms.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010])
...
@@ -344,10 +346,9 @@ df.to_csv('submission.csv', index=False)
...
@@ -344,10 +346,9 @@ df.to_csv('submission.csv', index=False)
## 练习
## 练习
*
使用Kaggle比赛的完整CIFAR-10数据集。把
`batch_size`
和
`num_epochs`
分别改为128和100。看看你可以在这个比赛中拿到什么样的准确率和名次?
*
使用Kaggle比赛的完整CIFAR-10数据集。把
批量大小
`batch_size`
和迭代周期数
`num_epochs`
分别改为128和100。看看你可以在这个比赛中拿到什么样的准确率和名次?
*
如果不使用增强数据的方法能拿到什么样的准确率?
*
如果不使用增强数据的方法能拿到什么样的准确率?
*
在
`transforms.RandomResizedCrop`
前依次添加以下数据增广操作(使用逗号隔开):transforms.CenterCrop(32)、transforms.RandomFlipTopBottom()、transforms.RandomColorJitter(brightness=0.0, contrast=0.0, saturation=0.0, hue=0.0)、transforms.RandomLighting(0.0)、transforms.Cast('float32')和transforms.Resize(32)。调一调它们的超参数。对结果有什么影响?
*
扫码直达讨论区,在社区交流方法和结果。你能发掘出其他更好的技巧吗?
*
扫码直达讨论区,在社区交流方法和结果。相信你一定会有收获。
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/1545/)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/1545/)
...
...
chapter_computer-vision/kaggle-gluon-dog.md
浏览文件 @
939a873b
此差异已折叠。
点击以展开。
chapter_supervised-learning/kaggle-gluon-kfold.md
浏览文件 @
939a873b
...
@@ -259,7 +259,7 @@ train_and_pred(num_epochs, verbose_epoch, train_features, test_features,
...
@@ -259,7 +259,7 @@ train_and_pred(num_epochs, verbose_epoch, train_features, test_features,
*
在Kaggle提交本教程的预测结果。观察一下,这个结果能在Kaggle上拿到什么样的分数?
*
在Kaggle提交本教程的预测结果。观察一下,这个结果能在Kaggle上拿到什么样的分数?
*
对照$K$折交叉验证结果,不断修改模型(例如添加隐藏层)和调参,你能提高Kaggle上的分数吗?
*
对照$K$折交叉验证结果,不断修改模型(例如添加隐藏层)和调参,你能提高Kaggle上的分数吗?
*
如果不使用本节中对连续数值特征的标准化处理,结果会有什么变化?
*
如果不使用本节中对连续数值特征的标准化处理,结果会有什么变化?
*
扫码直达讨论区,在社区交流方法和结果。
相信你一定会有收获。
*
扫码直达讨论区,在社区交流方法和结果。
你能发掘出其他更好的技巧吗?
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/1039)
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/1039)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录