2017-05-23 2 views
0

Je dispose d'un tableau numérique de (10000, 32, 32, 3) (10000 images, 32 pixels par 32 pixels, 3 canaux de couleur) et j'essaie de normaliser chacun des trois derniers canaux individuellement .Normalisation sur les canaux de couleur en numpy

Pour normaliser à travers le canal rouge I essayé d'utiliser

testX[:,:,:,0] = (testX[:,:,:,0]-np.mean(testX[:,:,:,0]))/np.std(testX[:,:,:,0]) 

mais au lieu de produire une sortie normalisée le long de la colonne rouge tel que: (ce qui est la dernière ligne de pixels dans l'une des images)

[[ 
     ..., 
    [[-1.78, 108, 94], 
    [ 0.54, 37, 21], 
    [ 0.12, 136, 127], 
    ..., 
    [-0.68, 172, 114], 
    [ 0.97, 204, 141], 
    [ 1.20, 182, 118]]]] 

il réglé tous les globules rouges d'être soit 0, 1 ou 255

[[ 
    ..., 
    [[ 0, 108, 94], 
    [255, 37, 21], 
    [ 0, 136, 127], 
    ..., 
    [ 0, 172, 114], 
    [ 0, 204, 141], 
    [ 1, 182, 118]]]] 

qu'est-ce qui me manque dans cette fonction de découpage?

Existe-t-il un meilleur moyen d'y parvenir?

Puisque j'essaie de normaliser cela, serait-il plus logique de faire quelque chose de beaucoup plus simple au lieu de se soucier de la normalisation par la couleur? Tels que

testX = testX/255 
+0

Qu'entendez-vous exactement par «sortie normalisée»? Je pense que cela signifierait différentes choses dans différents contextes. – Divakar

+0

Ne vaudrait-il pas mieux prendre la moyenne des données? – thesonyman101

+0

À l'origine, je prenais la moyenne des données en utilisant testX = (testX-np.mean (testX))/np.std (testX) qui fonctionnait bien, mais je voyais si le faire par couleur améliorerait le l'apprentissage du réseau de neurones je m'entraîne. Par résultat normalisé, je veux dire soustraire la moyenne et ensuite diviser par la déviation std qui produit une distribution normale. Bien que j'ai vu une normalisation tout aussi utile qui consiste simplement à diviser chaque point de données par le maximum dans le tableau –

Répondre

0

Je me demande si cela pourrait être causé par avoir le type de données de la matrice numpy finale réglée sur int au lieu de flotter. Voir l'exemple suivant, où 'x' est les données d'image:

redchannel = x[:,:,:,0] 
greenchannel = x[:,:,:,1] 
bluechannel = x[:,:,:,2] 
a = 0.0 
b = 1.0 
imgdata_min = 0 
imgdata_max = 255 

normalized_redchannel = a + (((redchannel - imgdata_min)*(b - a))/(imgdata_max - imgdata_min)) 

# merge channels 
x_with_normalized_red = np.stack((normalized_redchannel,greenchannel,bluechannel), axis=3) 
print(x_with_normalized_red.astype('int32')) # prints 0/1 values 
print(x_with_normalized_red.astype('float32')) # prints floating point values