J'essaie de remodeler un tableau numpy comme:
data3 = data3.reshape((data3.shape[0], 28, 28))
où data3
est:
[[54 68 66 ..., 83 72 58]
[63 63 63 ..., 51 51 51]
[41 45 80 ..., 44 46 81]
...,
[58 60 61 ..., 75 75 81]
[56 58 59 ..., 72 75 80]
[ 4 4 4 ..., 8 8 8]]
data3.shape
est (52, 2352 )
Mais je reçois toujours l'erreur suivante:
ValueError: cannot reshape array of size 122304 into shape (52,28,28)
Exception TypeError: TypeError("'NoneType' object is not callable",) in <function _remove at 0x10b6477d0> ignored
Que se passe-t-il et comment corriger cette erreur?
METTRE À JOUR:
Je fais cela pour obtenir data3
utilisé ci-dessus:
def image_to_feature_vector(image, size=(28, 28)):
return cv2.resize(image, size).flatten()
data3 = np.array([image_to_feature_vector(cv2.imread(imagePath)) for imagePath in imagePaths])
imagePaths contient les chemins d'accès à toutes les images de mon jeu de données. Je veux en fait convertir les données3 en flat list of 784-dim vectors
, Cependant, le
image_to_feature_vector
la fonction le convertit en un vecteur de 3072 dim !!
Vous pouvez remodeler les tableaux matriciels numpy de telle sorte qu'avant (a x b x c..n) = après (a x b x c..n). c'est-à-dire que le total des éléments dans la matrice doit être le même qu'avant, dans votre cas, vous pouvez le transformer de telle sorte que les données transformées3 aient une forme (156, 28, 28) ou simplement: -
import numpy as np
data3 = np.arange(122304).reshape(52, 2352 )
data3 = data3.reshape((data3.shape[0]*3, 28, 28))
print(data3.shape)
La sortie est de la forme
[[[ 0 1 2 ..., 25 26 27]
[ 28 29 30 ..., 53 54 55]
[ 56 57 58 ..., 81 82 83]
...,
[ 700 701 702 ..., 725 726 727]
[ 728 729 730 ..., 753 754 755]
[ 756 757 758 ..., 781 782 783]]
...,
[122248 122249 122250 ..., 122273 122274 122275]
[122276 122277 122278 ..., 122301 122302 122303]]]
Tout d'abord, le nombre d'éléments de votre image d'entrée doit correspondre au nombre d'éléments dans le vecteur d'entités souhaité.
En supposant que ce qui précède est satisfait, ce qui suit devrait fonctionner:
# Reading all the images to a one numpy array. Paths of the images are in the imagePaths
data = np.array([np.array(cv2.imread(imagePaths[i])) for i in range(len(imagePaths))])
# This will contain the an array of feature vectors of the images
features = data.flatten().reshape(1, 784)