54.4_Dropout的实现
54.4 Dropout的实现
最后来实现Dropout,具体代码如下①。
dezero/functions.py
def dropout(x, dropout_ratio=0.5):
x = as_variable(x)
ifdezero.Config.train:steps/step54.py
xp =uda.get_array_module(x)
mask = xp.random.randint(*x.shape) > dropout_ratio
scale = xp.array(1.0 - dropout_ratio).astype(x.dtype)
y = x * mask / scale
return y
else:
return x代码中的x是Variable实例或ndarray实例。考虑到它也可能是CuPy的ndarray实例,我们使用xp =uda.get_array_module(x)来获得实际的包。剩余的代码都是介绍过的内容。下面是dropout的使用示例。
import numpy as np
fromdezero import test_mode
importdezero-functionsasF
$\mathbf{x} = \mathbf{np}$ .ones(5)
print(x)
#训练时
y $=$ F.dropout(x)
print(y)
#测试时
withtest_mode(): y $=$ F.dropout(x) print(y)运行结果
[1. 1. 1. 1. 1.]
variable([0. 2. 2. 0. 0. ])
variable([1. 1. 1. 1. 1. ])我们可以按照上面的方式使用F��out函数。此外,我们也实现了指定训练阶段和测试阶段的机制。今后在发生过拟合时,请积极地使用Dropout吧。
步骤55
CNN 的机制(1)
下面用几个步骤的篇幅来探讨CNN的内容。CNN是Convolutional Neural Network的缩写,意为卷积神经网络。它是一种在图像识别、语音识别和自然语言处理等领域使用的神经网络。尤其是在图像识别领域,大多数深度学习方法基于CNN。接下来笔者将介绍CNN的机制,特别是用于图像的CNN的机制。

本书从CNN的实现出发,仅对其机制进行说明。这里不会解释CNN为什么擅长图像识别,为什么可以提取图像的特征值。相关内容请参考本书前作《深度学习入门:基于Python的理论与实现》等资料。