Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
4b53aace
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 搜索 >>
提交
4b53aace
编写于
9月 08, 2017
作者:
M
muli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update mlp scratch
上级
8ed62fcd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
11 deletion
+16
-11
chapter02_multilayer-neural-network/mlp-scratch.md
chapter02_multilayer-neural-network/mlp-scratch.md
+16
-11
未找到文件。
chapter02_multilayer-neural-network/mlp-scratch.md
浏览文件 @
4b53aace
...
...
@@ -9,9 +9,9 @@
```
{.python .input n=1}
import sys
sys.path.append('..')
from mnist import load_data
import utils
batch_size = 256
train_data, test_data =
load_data
(batch_size)
train_data, test_data =
utils.load_data_fashion_mnist
(batch_size)
```
## 多层感知机
...
...
@@ -45,7 +45,13 @@ for param in params:
## 激活函数
如果我们就用线性操作符来构造多层神经网络,那么整个模型仍然只是一个线性函数。这是因为 $
\h
at{y} = X
\c
dot W_1
\c
dot W_2 = X
\c
dot W_4 $,这里$W_4 = W_1
\c
dot W_2$。为了让我们的模型可以拟合非线性函数,我们需要在层之间插入非线性的激活函数。这里我们使用ReLU,$f(x)=
\m
ax(x, 0)$:
如果我们就用线性操作符来构造多层神经网络,那么整个模型仍然只是一个线性函数。这是因为
$$
\h
at{y} = X
\c
dot W_1
\c
dot W_2 = X
\c
dot W_3 $$
这里$W_3 = W_1
\c
dot W_2$。为了让我们的模型可以拟合非线性函数,我们需要在层之间插入非线性的激活函数。这里我们使用ReLU
$$
\t
extrm{rel}u(x)=
\m
ax(x, 0)$$
```
{.python .input n=3}
def relu(X):
...
...
@@ -75,13 +81,12 @@ softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
## 训练
我们从
[
../utils.py
](
../utils.py
)
导入前面我们写好的函数。
训练跟之前一样。
训练跟之前一样。
```
{.python .input n=8}
from mxnet import autograd as autograd
from utils import SGD, accuracy, evaluate_accuracy
learning_rate = .
001
learning_rate = .
5
for epoch in range(5):
train_loss = 0.
...
...
@@ -91,19 +96,19 @@ for epoch in range(5):
output = net(data)
loss = softmax_cross_entropy(output, label)
loss.backward()
SGD(params, learning_rat
e)
utils.SGD(params, learning_rate/batch_siz
e)
train_loss += nd.mean(loss).asscalar()
train_acc += accuracy(output, label)
train_acc +=
utils.
accuracy(output, label)
test_acc = evaluate_accuracy(test_data, net)
test_acc =
utils.
evaluate_accuracy(test_data, net)
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))
```
## 总结
可以看到,加入一个隐含层后我们将精度提升了
10%
。
可以看到,加入一个隐含层后我们将精度提升了
不少
。
## 练习
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录