Prenez l'habitude d'écrire ensemble ! C'est le 13ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .
Construire des réseaux de neurones profonds pour améliorer la précision du modèle
Le réseau de neurones que nous avons utilisé dans le modèle précédent n'avait qu'une seule couche cachée entre les couches d'entrée et de sortie. Dans cette section, nous apprendrons à utiliser plusieurs couches cachées dans un réseau de neurones (d'où le nom de réseau de neurones profond) pour explorer l'effet de la profondeur du réseau sur les performances du modèle.
Un réseau neuronal profond signifie qu'il existe plusieurs couches cachées entre la couche d'entrée et la couche de sortie. Plusieurs couches cachées garantissent que les réseaux de neurones peuvent apprendre des relations non linéaires complexes entre les entrées et les sorties, une exigence que les réseaux de neurones simples ne peuvent pas remplir. Une architecture de réseau neuronal profond classique ressemble à ceci :
Construire une architecture de réseau neuronal profond en ajoutant plusieurs couches cachées entre les couches d'entrée et de sortie, les étapes sont les suivantes.
- Chargez et mettez à l'échelle l'ensemble de données :
(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]
复制代码
- Créez un modèle avec plusieurs couches masquées entre les couches d'entrée et de sortie :
model = Sequential()
model.add(Dense(512, input_dim=num_pixels, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
复制代码
Les informations de modèle pertinentes pour l'architecture du modèle sont les suivantes :
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 512) 401920
_________________________________________________________________
dense_1 (Dense) (None, 1024) 525312
_________________________________________________________________
dense_2 (Dense) (None, 64) 65600
_________________________________________________________________
dense_3 (Dense) (None, 10) 650
=================================================================
Total params: 993,482
Trainable params: 993,482
Non-trainable params: 0
_________________________________________________________________
复制代码
Puisqu'il y a plus de couches cachées dans l'architecture du réseau neuronal profond, il y a aussi plus de paramètres dans le modèle.
- Une fois le modèle construit, il est temps de compiler et d'ajuster le modèle :
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=64,
verbose=1)
复制代码
La précision du modèle formé est d'environ 98.9%
, légèrement meilleure que la précision obtenue avec l'architecture de modèle précédemment utilisée en raison de MNIST
l' ensemble de données relativement simple. Les pertes et la précision de formation et de test sont les suivantes :
Comme le montre la figure ci-dessus, la précision de l'ensemble de données d'entraînement est largement meilleure que la précision de l'ensemble de données de test, ce qui indique que le réseau neuronal profond suradapte les données d'entraînement. Dans des études ultérieures, nous découvrirons des moyens d'éviter le surajustement des données d'entraînement.
Liens connexes
Keras Deep Learning - Formation des réseaux de neurones bruts