Comment mettre en œuvre la ZCA de Blanchiment? Python
Im essayant de mettre en œuvre ZCA de blanchiment et a trouvé quelques articles pour le faire, mais ils sont un peu confus.. quelqu'un peut-il briller une lumière pour moi?
Tout conseil ou aide est très appréciée!
Voici les articles que j'ai lu :
http://courses.media.mit.edu/2010fall/mas622j/whiten.pdf
http://bbabenko.tumblr.com/post/86756017649/learning-low-level-vision-feautres-in-10-lines-of
J'ai essayé plusieurs choses, mais la plupart d'entre eux, je ne comprenais et je suis bloqué à une étape.
Droit maintenant, j'ai ce que la base de recommencer :
dtype = np.float32
data = np.loadtxt("../inputData/train.csv", dtype=dtype, delimiter=',', skiprows=1)
img = ((data[1,1:]).reshape((28,28)).astype('uint8')*255)
OriginalL'auteur | 2015-07-21
Vous devez vous connecter pour publier un commentaire.
Ici est une fonction python pour générer de la ZCA de blanchiment de la matrice:
Et un exemple de l'utilisation:
Espère que cela aide!
Les détails de pourquoi Edgar Andrés Margffoy Tuay's réponse n'est pas correcte: Comme l'a souligné dans R. M's commentaire, Edgar Andrés Margffoy Tuay's ZCA de blanchiment de la fonction contient une petite erreur cruciale: la
np.diag(S)
doit être supprimé. Numpy retourneS
comme une m x 1 vecteur et non une m x la matrice m (comme il est commun à d'autres svd implémentations, par exemple, Matlab). D'où laZCAMatrix
variable devient un m x 1 vecteur et non une m x la matrice m comme il se doit (lorsque l'entrée est de m x n). (En outre, la matrice de covariance dans Andfoy la réponse n'est valable que si X est pré-centré, je.e moyenne de 0).Autres références pour la ZCA: Vous pouvez voir la réponse complète, en Python, pour le Stanford UFLDL ZCA de Blanchiment d'exercice ici.
OriginalL'auteur Pascal Timshel
Vos données sont stockées dans une matrice mxn? Où m est la dimension des données et n le nombre total de cas? Si ce n'est pas le cas, vous devez redimensionner vos données. Par exemple, si vos images sont de taille 28x28 et vous n'avez qu'une image, vous devez avoir une 1x784 vecteur. Vous pouvez utiliser cette fonction:
Puis vous appliquez la ZCA de Blanchiment à votre formation défini à l'aide de:
Il est important de sauver la
ZCAMatrix
de la matrice, vous devez multiplier vos cas de test, si vous voulez prévoir après la formation du réseau Neuronal.Enfin, je vous invite à prendre le Stanford UFLDL des Tutoriels http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial ou http://ufldl.stanford.edu/tutorial/ . Ils ont de très bonnes explications et aussi quelques exercices de programmation sur MATLAB, cependant, presque toutes les fonctions de MATLAB sont sur Numpy par le même nom. J'espère que cela peut donner une idée.
Si vos données sont déjà représentés par un un m x 784 matrice, vous devez appeler zca_whitening(données). Est-ce la MNIST ensemble de données de l'écriture manuscrite numérique?
Oui il l'est! De Kaggle de la concurrence 🙂
Je me demande comment puis-je passer de l'image , de retour à csv. Donc je peux créer un fichier csv de la ZCA , par exemple.
Est-il un bug dans cet exemple? Le MATLAB svd() retourne S comme le mxm diagonale de la matrice, alors que numpy du svd() retourne S 1xm vecteur de tout les éléments de la diagonale. Donc, je pense que l'intérieur de la np.diag() devrait être supprimé, et il faut juste être
ZCAMatrix = np.dot(np.dot(U, np.diag(1.0/np.sqrt(S + epsilon))), U.T)
, qui devrait vous donner le mxm matrice dont vous avez besoin, par opposition à la 1xm vecteur-je obtenir avec le code actuel.OriginalL'auteur Edgar Andrés Margffoy Tuay
J'ai peut-être un peu tard pour la discussion, mais j'ai trouvé ce fil récemment que j'ai eu du mal à mettre en œuvre ZCA dans TensorFlow parce que mon pauvre PC processeur est trop lent pour traiter de grands volumes de données.
Si quelqu'un est intéressé, j'ai fait une gist de ma mise en œuvre de la ZCA dans TensorFlow:
Je sais que ce n'est pas une réponse adéquate à la question d'origine, mais encore il peut être utile à toute personne qui est à la recherche d'un GPU de la mise en œuvre de la ZCA, mais ne pouvait pas en trouver un.
OriginalL'auteur Samuele Cornell
Bien que les deux réponses reportez-vous à la UFLDL tutoriel, aucun d'eux ne semble utiliser la procédure décrite dans l'.
Donc, j'ai pensé qu'il pourrait ne pas être une mauvaise idée de simplement fournir une réponse simplement implémente PCA/ZCA-blanchiment selon le tutoriel:
Je suppose que vous pouvez envelopper ce dans une fonction par vous-même...
Une alternative de mise en œuvre, qui peut parfois être plus efficace (et devrait avoir une meilleure stabilité de ce que je me souviens de mon numérique cours de maths), serait:
Pour les mathématiques derrière cela, je me réfère à cette excellente réponse de la croix validé.
full_matrices = False
drapeaunumpy.linalg.svd
pour faire un soi-disant réduction de svd. Sinon, vous risquez d'être surpris par la la consommation de mémoire...OriginalL'auteur Mr Tsjolder
Cela fonctionne avec un tableau de 48x48:
par exemple à partir de cette image:
retourne:
Voici le code:
https://gist.github.com/m-alcu/45f4a083cb5e388d2ed26ace4392ed66, doit mettre fer2013.csv fichier dans le même répertoire (https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data)
OriginalL'auteur Martin Alcubierre Arenillas