2 votes

Utilisation d'un jeu de données personnalisé pour la reconnaissance faciale au lieu de MNIST

Je voudrais utiliser un jeu de données personnalisé qui contient des images de visages pour différentes personnes. Je prévois d'utiliser le CNN et le stacked-autoencoder pour classer mes images.

devrais-je changer (x_train, _), (x_test, _) = mnist.load_data() ?

ou changer input_img, je pense que le problème se situe au niveau des données d'entrée mais je n'ai aucune idée de l'endroit où cela devrait être modifié.

Je suis perdu j'ai besoin d'aide.

from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras import backend as K

input_img = Input(shape=(28, 28, 1))  # adaptez si vous utilisez le format de données image `channels_first`

x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

# à ce stade, la représentation est (4, 4, 8) c'est-à-dire 128-dimensionnelle

x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

from keras.datasets import mnist
import numpy as np

(x_train, _), (x_test, _) = mnist.load_data()

x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))  # adaptez si vous utilisez le format de données image `channels_first`
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))  # adaptez si vous utilisez le format de données image `channels_first`

from keras.callbacks import TensorBoard

autoencoder.fit(x_train, x_train,
epochs=50,
batch_size=128,
shuffle=True,
validation_data=(x_test, x_test),
callbacks=[TensorBoard(log_dir='/tmp/autoencoder')])

decoded_imgs = autoencoder.predict(x_test)

n = 10
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 4))
for i in range(n):
# afficher l'original
ax = plt.subplot(2, n, i)
plt.imshow(x_test[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

# afficher la reconstruction
ax = plt.subplot(2, n, i + n)
plt.imshow(decoded_imgs[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()

1voto

xashru Points 1954

Vous devrez modifier (x_train, _), (x_test, _) = mnist.load_data() avec votre chargeur de données. Vous pouvez utiliser la classe ImageDataGenerator de keras pour y parvenir ou construire le vôtre propre. Si la taille de votre image est bien supérieure à 28 x 28, vous devrez peut-être également modifier l'architecture du modèle car les remodeler directement en 28 x 28 ne produira pas de bons résultats.

0voto

Adrien Pavao Points 333

Vous devez charger votre jeu de données et le diviser en deux sous-ensembles : x_train et x_test.

Sous quel format vos données sont-elles stockées ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X