Saya mencoba membentuk kembali array numpy sebagai:
data3 = data3.reshape((data3.shape[0], 28, 28))
di mana data3
adalah:
[[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
adalah (52, 2352 )
Tetapi saya terus mendapatkan kesalahan berikut:
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
Apa yang terjadi dan bagaimana cara memperbaiki kesalahan ini?
UPDATE:
Saya melakukan ini untuk mendapatkan data3
yang digunakan di atas:
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 berisi jalur ke semua gambar dalam dataset saya. Saya sebenarnya ingin mengubah data3 menjadi daftar datar dari vektor 784-dim
, namun
image_to_feature_vector
mengkonversinya menjadi vektor 3072-dim!!!
Anda dapat membentuk kembali array matriks numpy sedemikian rupa sehingga sebelum(a x b x c..n) = setelah(a x b x c..n). yaitu total elemen dalam matriks harus sama dengan sebelumnya, Dalam kasus Anda, Anda dapat mengubahnya sedemikian rupa sehingga data yang ditransformasikan3 memiliki bentuk (156, 28, 28) atau secara sederhana :-
import numpy as np
data3 = np.arange(122304).reshape(52, 2352 )
data3 = data3.reshape((data3.shape[0]*3, 28, 28))
print(data3.shape)
Keluarannya adalah dalam bentuk
[[[ 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]]]
Pertama, jumlah elemen gambar input Anda harus sesuai dengan jumlah elemen dalam vektor fitur yang diinginkan.
Dengan asumsi hal di atas terpenuhi, yang di bawah ini harus bekerja:
# 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)