概述
Drop_out
双隐层,丢弃法,每层以drop_prob1, drop_prob2的概率丢弃隐层中的神经元,同时放大未被丢弃的神经元1/(1-drop_prob)倍,不改变输入的期望值。
代码
import d2lzh as d2l
from mxnet import gluon, init, autograd
from mxnet.gluon import loss as gloss, nn
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist((batch_size))
loss = gloss.SoftmaxCrossEntropyLoss()
num_epochs = 5
lr = 0.4
drop_prob1 = 0.2
drop_prob2 = 0.5
net = nn.Sequential()
net.add(nn.Dense(256, activation='relu'))
net.add(nn.Dropout(drop_prob1))
net.add(nn.Dense(256, activation='relu'))
net.add(nn.Dropout(drop_prob2))
net.initialize((init.Normal(sigma=0.01)))
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': lr})
for epoch in range(num_epochs):
train_l_sum, train_acc_sum, n = 0.0, 0.0, 0
for X, y in train_iter:
with autograd.record():
y_hat = net(X)
l = loss(y_hat, y).sum()
l.backward() # 求导
trainer.step(batch_size) # 迭代并更新
y = y.astype('float32')
train_l_sum += l.asscalar()
train_acc_sum += (y_hat.argmax(axis=1) == y).sum().asscalar()
n += y.size
test_acc_sum, test_n = 0.0, 0
for test_X, test_y in test_iter:
test_y = test_y.astype('float32')
test_acc_sum += (net(test_X).argmax(axis=1) == test_y).sum().asscalar()
test_n += test_y.size
test_acc = test_acc_sum / test_n
print('epoch {}, loss {:.4f}, train acc {:.3f}, test_acc {:.3f}'.format(epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))
结果
epoch 1, loss 3.5948, train acc 0.382, test_acc 0.785
epoch 2, loss 3.2113, train acc 0.440, test_acc 0.836
epoch 3, loss 3.1349, train acc 0.455, test_acc 0.856
epoch 4, loss 3.1194, train acc 0.459, test_acc 0.852
epoch 5, loss 3.1119, train acc 0.463, test_acc 0.863
最后
以上就是单薄手链为你收集整理的《动手学深度学习》 Drop_out with gluonDrop_out的全部内容,希望文章能够帮你解决《动手学深度学习》 Drop_out with gluonDrop_out所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复