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的理论与实现》等资料。