正则化
- 正则化主要是为了减少模型的过拟合,就像激活函数是为了增加网络的非线性。
- Dropout只是其中的一种方法,主要是以一个概率将隐藏层的隐藏单元置为0
3. 通常越浅层网络置0的概率越低。
import tensorflow as tf
from d2l import tensorflow as d2l
def dropout_layer(X, dropout):
assert 0 <= dropout <= 1
if dropout == 1:
return tf.zeros_like(X)
if dropout == 0:
return X
mask = tf.random.uniform(
shape = tf.shape(X), minval=0, maxval=1) < 1-dropout
return tf.cast(mask, dtype=tf.float32) * X / (1.0 - dropout)
num_outputs, num_hiddens1, num_hiddens2 = 10, 256, 256
dropout1, dropout2 = 0.2, 0.5
class Net(tf.keras.Model):
def __init__(self, num_outputs, num_hiddens1, num_hiddens2):
super().__init__()
self.input_layer = tf.keras.layers.Flatten(