Aprendizaje profundo de Keras: el efecto del tamaño del lote en la precisión de los modelos de redes neuronales

¡Acostúmbrate a escribir juntos! Este es el décimo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

El efecto del tamaño del lote en la precisión del modelo

En la red neuronal original , usamos el tamaño de lote ( batch size) para todos los modelos que construimos 64. En esta sección, estudiaremos el efecto de cambiar el tamaño del lote en la precisión. Para explorar el efecto del tamaño del lote en la precisión del modelo, comparemos dos casos:

  • el tamaño del lote es 4096
  • el tamaño del lote es 64

Cuando el tamaño del lote es grande, el número de actualizaciones de peso en cada uno epoches pequeño. Cuando el tamaño del lote es pequeño epoch, se realizan múltiples actualizaciones de peso para cada uno, porque en cada uno epoch, se deben recorrer todos los datos de entrenamiento en el conjunto de datos, por lo que si cada uno se batchusa para calcular el valor de pérdida con menos datos, hará que cada uno epochtenga más Más batchpara recorrer todo el conjunto de datos. Por lo tanto, cuanto batchmenor sea el tamaño, mejor será la precisión del mismo modelo epochentrenado . Sin embargo, también debe asegurarse de que el tamaño del lote no sea tan pequeño como para causar un sobreajuste.

En el modelo anterior, usamos un modelo con un tamaño de lote de 64. En esta sección, continuamos usando la misma arquitectura de modelo y solo modificamos el tamaño del lote para el entrenamiento del modelo para comparar el impacto de diferentes tamaños de lote en el rendimiento del modelo. Preprocesar el conjunto de datos y ajustar el modelo:

(x_train, y_train), (x_test, y_test) = mnist.load_data()

num_pixels = x_train.shape[1] * x_train.shape[2]
x_train = x_train.reshape(-1, num_pixels).astype('float32')
x_test = x_test.reshape(-1, num_pixels).astype('float32')
x_train = x_train / 255.
x_test = x_test / 255.

y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]
model = Sequential()
model.add(Dense(1000, input_dim=num_pixels, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])

history = model.fit(x_train, y_train,
                    validation_data=(x_test, y_test),
                    epochs=50,
                    batch_size=4096,
                    verbose=1)
复制代码

Los únicos cambios en el código son los batch_sizeparámetros . Grafique epochlos trenes y pruebas (el código para trazar el gráfico es exactamente el mismo que se usó para entrenar la red neuronal original ):

Precisión y valores de pérdida para entrenamiento y prueba.

在上图中可以注意到,与批大小较小时的模型相比,批大小较大时模型需要训练更多的 epoch 准确率才能达到了 98%。在本节模型中,刚开始的训练阶段,模型准确率相对较低,并且只有在运行了相当多的 epoch 后模型的准确率才能达到较高水平。其原因是,批大小较小时,在每个 epoch 中权重更新的次数要少得多。

数据集总大小为 60000,当我们以批大小为 4096 运行模型 500 个 epoch 时,权重更新进行了 500 × ( 60000 ÷ 4096 ) = 7000 500\times(60000\div4096)= 7000 次。当批大小为 64 时,权重更新进行了 500 × ( 60000 ÷ 32 ) = 468500 500\times(60000\div32)=468500 次。因此,批大小越小,权重更新的次数就越多,并且通常在 epoch 数相同的情况下,准确率越好。同时,应注意批大小也不能过小,这可能导致训练时间过长以及过拟合情况的出现。

相关链接

Keras深度学习——训练原始神经网络

Keras深度学习——缩放输入数据集提升神经网络性能

Supongo que te gusta

Origin juejin.im/post/7085492398142259236
Recomendado
Clasificación