Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
92959cca
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,发现更多精彩内容 >>
提交
92959cca
编写于
9月 22, 2017
作者:
M
Mu Li
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update dropout
上级
9947abcb
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
35 addition
and
33 deletion
+35
-33
chapter02_supervised-learning/02.md
chapter02_supervised-learning/02.md
+3
-1
chapter02_supervised-learning/dropout-gluon.md
chapter02_supervised-learning/dropout-gluon.md
+15
-13
chapter02_supervised-learning/dropout-scratch.md
chapter02_supervised-learning/dropout-scratch.md
+15
-18
chapter02_supervised-learning/mlp-scratch.md
chapter02_supervised-learning/mlp-scratch.md
+2
-1
未找到文件。
chapter02_supervised-learning/02.md
浏览文件 @
92959cca
...
@@ -14,6 +14,8 @@
...
@@ -14,6 +14,8 @@
underfit-overfit
underfit-overfit
reg-scratch
reg-scratch
reg-gluon
reg-gluon
dropout-scratch
dropout-gluon
kaggle-gluon-kfold
kaggle-gluon-kfold
```
```
chapter02_supervised-learning/dropout-gluon.md
浏览文件 @
92959cca
...
@@ -9,23 +9,23 @@
...
@@ -9,23 +9,23 @@
更靠近输入层的元素丢弃概率设的更小一点。这个试验中,我们把第一层全连接后的元素丢弃概率设为0.2,把第二层全连接后的元素丢弃概率设为0.5。
更靠近输入层的元素丢弃概率设的更小一点。这个试验中,我们把第一层全连接后的元素丢弃概率设为0.2,把第二层全连接后的元素丢弃概率设为0.5。
```
{.python .input n=5}
```
{.python .input n=5}
from mxnet
import gluo
n
from mxnet
.gluon import n
n
net =
gluon.
nn.Sequential()
net = nn.Sequential()
drop_prob1 = 0.2
drop_prob1 = 0.2
drop_prob2 = 0.5
drop_prob2 = 0.5
with net.name_scope():
with net.name_scope():
net.add(
gluon.
nn.Flatten())
net.add(nn.Flatten())
# 第一层全连接。
# 第一层全连接。
net.add(
gluon.
nn.Dense(256, activation="relu"))
net.add(nn.Dense(256, activation="relu"))
# 在第一层全连接后添加丢弃层。
# 在第一层全连接后添加丢弃层。
net.add(
gluon.
nn.Dropout(drop_prob1))
net.add(nn.Dropout(drop_prob1))
# 第二层全连接。
# 第二层全连接。
net.add(
gluon.
nn.Dense(256, activation="relu"))
net.add(nn.Dense(256, activation="relu"))
# 在第二层全连接后添加丢弃层。
# 在第二层全连接后添加丢弃层。
net.add(
gluon.
nn.Dropout(drop_prob2))
net.add(nn.Dropout(drop_prob2))
net.add(
gluon.
nn.Dense(10))
net.add(nn.Dense(10))
net.initialize()
net.initialize()
```
```
...
@@ -36,16 +36,17 @@ net.initialize()
...
@@ -36,16 +36,17 @@ net.initialize()
```
{.python .input n=6}
```
{.python .input n=6}
import sys
import sys
sys.path.append('..')
sys.path.append('..')
from mxnet import ndarray as nd
from mxnet import autograd
import utils
import utils
from mxnet import nd
from mxnet import autograd
from mxnet import gluon
batch_size = 256
batch_size = 256
train_data, test_data = utils.load_data_fashion_mnist(batch_size)
train_data, test_data = utils.load_data_fashion_mnist(batch_size)
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.5})
trainer = gluon.Trainer(net.collect_params(),
'sgd', {'learning_rate': 0.5})
for epoch in range(5):
for epoch in range(5):
train_loss = 0.
train_loss = 0.
...
@@ -62,7 +63,8 @@ for epoch in range(5):
...
@@ -62,7 +63,8 @@ for epoch in range(5):
test_acc = utils.evaluate_accuracy(test_data, net)
test_acc = utils.evaluate_accuracy(test_data, net)
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (
epoch, train_loss/len(train_data), train_acc/len(train_data), test_acc))
epoch, train_loss/len(train_data),
train_acc/len(train_data), test_acc))
```
```
## 结论
## 结论
...
...
chapter02_supervised-learning/dropout-scratch.md
浏览文件 @
92959cca
# 丢弃法 --- 从0开始
# 丢弃法 --- 从0开始
前面我们介绍了多层神经网络,就是包含至少一个隐含层的网络。我们也介绍了正则法来应对过拟合问题。在深度学习中,一个常用的应对过拟合问题的方法叫做丢弃法。本节以多层
前面我们介绍了多层神经网络,就是包含至少一个隐含层的网络。我们也介绍了正则法来应对过拟合问题。在深度学习中,一个常用的应对过拟合问题的方法叫做丢弃法(Dropout)。本节以多层神经网络为例,从0开始介绍丢弃法。
神经网络为例,从0开始介绍丢弃法。
由于丢弃法的概念和实现非常容易,在本节中,我们先介绍丢弃法的概念以及它在现代神经网络中是如何实现的。然后我们一起探讨丢弃法的本质。
由于丢弃法的概念和实现非常容易,在本节中,我们先介绍丢弃法的概念以及它在现代神经网络中是如何实现的。然后我们一起探讨丢弃法的本质。
...
@@ -20,6 +19,8 @@
...
@@ -20,6 +19,8 @@
丢弃法的实现很容易,例如像下面这样。这里的标量
`drop_probability`
定义了一个
`X`
(
`NDArray`
类)中任何一个元素被丢弃的概率。
丢弃法的实现很容易,例如像下面这样。这里的标量
`drop_probability`
定义了一个
`X`
(
`NDArray`
类)中任何一个元素被丢弃的概率。
```
{.python .input}
```
{.python .input}
from mxnet import nd
def dropout(X, drop_probability):
def dropout(X, drop_probability):
keep_probability = 1 - drop_probability
keep_probability = 1 - drop_probability
assert 0 <= keep_probability <= 1
assert 0 <= keep_probability <= 1
...
@@ -28,8 +29,9 @@ def dropout(X, drop_probability):
...
@@ -28,8 +29,9 @@ def dropout(X, drop_probability):
return X.zeros_like()
return X.zeros_like()
# 随机选择一部分该层的输出作为丢弃元素。
# 随机选择一部分该层的输出作为丢弃元素。
mask = nd.random_uniform(0, 1.0, X.shape, ctx=X.context) < keep_probability
mask = nd.random.uniform(
# 这里keep_probability必不为0。
0, 1.0, X.shape, ctx=X.context) < keep_probability
# 保证 E[dropout(X)] == X
scale = 1 / keep_probability
scale = 1 / keep_probability
return mask * X * scale
return mask * X * scale
```
```
...
@@ -37,8 +39,6 @@ def dropout(X, drop_probability):
...
@@ -37,8 +39,6 @@ def dropout(X, drop_probability):
我们运行几个实例来验证一下。
我们运行几个实例来验证一下。
```
{.python .input}
```
{.python .input}
from mxnet import ndarray as nd
A = nd.arange(20).reshape((5,4))
A = nd.arange(20).reshape((5,4))
dropout(A, 0.0)
dropout(A, 0.0)
```
```
...
@@ -109,12 +109,6 @@ params = [W1, b1, W2, b2, W3, b3]
...
@@ -109,12 +109,6 @@ params = [W1, b1, W2, b2, W3, b3]
for param in params:
for param in params:
param.attach_grad()
param.attach_grad()
def relu(X):
return nd.maximum(X, 0)
from mxnet import gluon
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
```
```
## 定义包含丢弃层的模型
## 定义包含丢弃层的模型
...
@@ -129,15 +123,14 @@ drop_prob2 = 0.5
...
@@ -129,15 +123,14 @@ drop_prob2 = 0.5
def net(X):
def net(X):
X = X.reshape((-1, num_inputs))
X = X.reshape((-1, num_inputs))
# 第一层全连接。
# 第一层全连接。
h1 = relu(nd.dot(X, W1) + b1)
h1 =
nd.
relu(nd.dot(X, W1) + b1)
# 在第一层全连接后添加丢弃层。
# 在第一层全连接后添加丢弃层。
h1 = dropout(h1, drop_prob1)
h1 = dropout(h1, drop_prob1)
# 第二层全连接。
# 第二层全连接。
h2 = relu(nd.dot(h1, W2) + b2)
h2 =
nd.
relu(nd.dot(h1, W2) + b2)
# 在第二层全连接后添加丢弃层。
# 在第二层全连接后添加丢弃层。
h2 = dropout(h2, drop_prob2)
h2 = dropout(h2, drop_prob2)
output = nd.dot(h2, W3) + b3
return nd.dot(h2, W3) + b3
return output
```
```
## 训练
## 训练
...
@@ -145,7 +138,10 @@ def net(X):
...
@@ -145,7 +138,10 @@ def net(X):
训练跟之前一样。
训练跟之前一样。
```
{.python .input n=8}
```
{.python .input n=8}
from mxnet import autograd as autograd
from mxnet import autograd
from mxnet import gluon
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
learning_rate = .5
learning_rate = .5
...
@@ -164,7 +160,8 @@ for epoch in range(5):
...
@@ -164,7 +160,8 @@ for epoch in range(5):
test_acc = utils.evaluate_accuracy(test_data, net)
test_acc = utils.evaluate_accuracy(test_data, net)
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (
epoch, train_loss/len(train_data), train_acc/len(train_data), test_acc))
epoch, train_loss/len(train_data),
train_acc/len(train_data), test_acc))
```
```
## 总结
## 总结
...
...
chapter02_supervised-learning/mlp-scratch.md
浏览文件 @
92959cca
...
@@ -103,7 +103,8 @@ for epoch in range(5):
...
@@ -103,7 +103,8 @@ for epoch in range(5):
test_acc = utils.evaluate_accuracy(test_data, net)
test_acc = utils.evaluate_accuracy(test_data, net)
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (
epoch, train_loss/len(train_data), train_acc/len(train_data), test_acc))
epoch, train_loss/len(train_data),
train_acc/len(train_data), test_acc))
```
```
## 总结
## 总结
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录