防止神经网络过拟合的常用方法包括:
1.减小网络容量;2.添加权重正则化;3.添加dropout;4.获取更多的训练数据。
Overfitting and underfitting
过拟合与欠拟合
为了防止模型从训练数据中学到错误或无关紧要的模式,最优解决方法是获取更多的训练数据。模型的训练数据越多,泛化能力自然也越好。如果无法获取更多数据,次优解决方法是调节模型允许存储的信息量,或对模型允许存储的信息加以约束。如果一个网络只能记住几个模式,那么优化过程会迫使模型集中学习最重要的模式,这样更可能得到良好的泛化。
这种降低过拟合的方法叫作正则化(regularization)。我们先介绍几种最常见的正则化方法: 然后将其应用于实践中,以改进上一节的电影分类模型。
from keras.datasets import imdb
import numpy as np
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
def vectorize_sequences(sequences, dimension=10000):
# Create an all-zero matrix of shape (len(sequences), dimension)(创建一个形状为 (len(sequences), dimension) 的零矩阵)
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1. # set specific indices of results[i] to 1.(将 results[i] 的指定索引设为 1)
return results
# Our vectorized training data(将训练数据向量化)
x_train = vectorize_sequences(train_data)
# Our vectorized test data(将测试数据向量化)
x_test = vectorize_sequences(test_data)
# Our vectorized labels(将标签向量化)
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')
克服过拟合
减小网络大小
防止过拟合的最简单的方法就是减小模型大小,即减少模型中可学习参数的个数(这由层数和每层的单元个数决定)。在深度学习中,模型中可学习参数的个数通常被称为模型的容量(capacity)。直观上来看,参数更多的模型拥有更大的记忆容