Я разрабатываю простой Искусственный интеллект для проекта колледжа, и пока он работал, пока он не начал случайным образом создавать массив numpy внутри другого массива numpy. Один из конвертируемых списков - это набор данных, который я создал сам, который затем перебирается, и каждое изображение читается cv2 и добавляется в новый список. Этот новый список затем преобразуется в массив numpy (именно он вызывает проблему). Второй, меньший список (тестовые изображения) проходит тот же процесс и дает желаемый результат.
Это код набора данных, каждая строка является именем файла.
images = ['Dana C zero 1.png','Dana C zero 2.png','Dana C zero 3.png','Dana C zero 4.png','Dana C zero 5.png',
'Dana C zero 6.png','Dana C zero 7.png','Dana C zero 8.png','Dana C zero 9.png',
'Dana C zero 10.png','Dana C zero 11.png','Dana C zero 12.png','Dana C zero 13.png','Dana C zero 14.png',
'Dana C zero 15.png','Dana C zero 16.png','Dana C zero 17.png','Dana C zero 18.png','Dana C zero 19.png',
'Dana C one 1.png','Dana C one 2.png','Dana C one 3.png','Dana C one 4.png','Dana C one 5.png',
'Dana C one 6.png','Dana C one 7.png','Dana C one 8.png','Dana C one 9.png',
'Dana C one 10.png','Dana C one 11.png','Dana C one 12.png','Dana C one 13.png',
'Dana C one 14.png','Dana C one 15.png','Dana C one 16.png','Dana C one 17.png',
'Dana C one 18.png','Dana C one 19.png','Dana C two 1.png','Dana C two 2.png','Dana C two 3.png',
'Dana C two 4.png','Dana C two 5.png','Dana C two 6.png','Dana C two 7.png','Dana C two 8.png',
'Dana C two 9.png','Dana C two 10.png','Dana C two 11.png','Dana C two 12.png','Dana C two 13.png',
'Dana C two 14.png','Dana C two 15.png','Dana C two 16.png','Dana C two 17.png','Dana C two 19.png',
'Dana C two 20.png','Dana C three 1.png','Dana C three 2.png','Dana C three 3.png',
'Dana C three 4.png','Dana C three 5.png','Dana C three 6.png','Dana C three 7.png','Dana C three 8.png',
'Dana C three 9.png','Dana C three 10.png','Dana C three 11.png','Dana C three 12.png',
'Dana C three 13.png','Dana C three 14.png','Dana C three 15.png','Dana C three 16.png',
'Dana C three 17.png','Dana C three 18.png','Dana C three 19.png',
'Dana C four 1.png','Dana C four 2.png','Dana C four 3.png','Dana C four 4.png','Dana C four 5.png','Dana C four 6.png','Dana C four 7.png',
'Dana C four 8.png','Dana C four 9.png','Dana C four 10.png','Dana C four 11.png','Dana C four 12.png','Dana C four 13.png','Dana C four 14.png',
'Dana C four 15.png','Dana C four 16.png','Dana C four 17.png','Dana C four 18.png','Dana C four 19.png',
'Dana C five 1.png','Dana C five 2.png','Dana C five 3.png','Dana C five 4.png','Dana C five 5.png','Dana C five 6.png','Dana C five 7.png',
'Dana C five 8.png','Dana C five 9.png','Dana C five 10.png','Dana C five 11.png','Dana C five 12.png','Dana C five 13.png','Dana C five 14.png','Dana C five 15.png',
'Dana C five 16.png','Dana C five 17.png','Dana C five 18.png','Dana C five 19.png',
'Dana C six 1.png','Dana C six 2.png','Dana C six 3.png','Dana C six 4.png','Dana C six 5.png','Dana C six 6.png','Dana C six 7.png',
'Dana C six 8.png','Dana C six 9.png','Dana C six 10.png','Dana C six 11.png','Dana C six 12.png','Dana C six 13.png',
'Dana C six 14.png','Dana C six 15.png','Dana C six 16.png','Dana C six 17.png','Dana C six 18.png','Dana C six 19.png',
'Dana C seven 1.png','Dana C seven 2.png','Dana C seven 3.png','Dana C seven 4.png','Dana C seven 5.png','Dana C seven 6.png',
'Dana C seven 7.png','Dana C seven 8.png','Dana C seven 9.png','Dana C seven 10.png','Dana C seven 11.png','Dana C seven 12.png',
'Dana C seven 13.png','Dana C seven 14.png','Dana C seven 15.png','Dana C seven 16.png','Dana C seven 17.png','Dana C seven 18.png','Dana C seven 19.png',
'Dana C eight 1.png','Dana C eight 2.png','Dana C eight 3.png','Dana C eight 4.png','Dana C eight 5.png','Dana C eight 6.png',
'Dana C eight 7.png','Dana C eight 8.png','Dana C eight 9.png','Dan C eight 10.png','Dana C eight 11.png','Dana C eight 12.png',
'Dana C eight 13.png','Dana C eight 14.png','Dana C eight 15.png','Dana C eight 16.png','Dana C eight 17.png','Dana C eight 18.png','Dana C eight 19.png']
readyImages = []
readyLabels = np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8])
testImages = ['Dana C zero 20.png','Dana C one 20.png','Dana C two 18.png','Dana C three 20.png','Dana C four 20.png','Dana C five 20.png',
'Dana C six 20.png','Dana C seven 20.png','Dana C eight 20.png']
readyTestImages = []
testLabels = [0,1,2,3,4,5,6,7,8]
Код ниже - это два цикла for, используемые для создания списка «подготовленных изображений»
for i in range (0, len(images)):
img = cv2.imread(images[i])
readyImages.append(img)
for i in range (0, len(testImages)):
img = cv2.imread(testImages[i])
readyTestImages.append(img)
Эти два «готовых» списка затем превращаются в numpy массивы со следующим кодом:
readyImages = np.array(readyImages)
readyTestImages = np.array(readyTestImages)
После этого массив 'readyImages' выглядит следующим образом:
array([array([[[179, 179, 179],
[185, 185, 185],
[204, 204, 204],
...,
[181, 181, 181],
[182, 182, 182],
[179, 179, 179]],
[[218, 218, 218],
[229, 229, 229],
[237, 237, 237],
...,
[228, 228, 228],
[229, 229, 229],
[229, 229, 229]],
[[240, 240, 240],
[252, 252, 252],
[253, 253, 253],
...,
[252, 252, 252],
[252, 252, 252],
[254, 254, 254]],
...,
(остальная часть массива не включена, так как он массивный) Массив 'readyTestImages' выглядит следующим образом это (в норме):
array([[[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
...,
Все изображения, тестирование и обучение, имеют размер 28x28, поэтому это не является причиной проблемы (поскольку она уже вызвала проблемы, которые до этого были решены). Я знаю, что вызывает эту проблему, но она не позволяет моей программе работать. Incase его полезно, пока данные данные пытаются пройти через нейронную модель (код ниже):
train_images = readyImages
train_labels = readyLabels
test_images = testImages
train_images = train_images / 255.0
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28,28, 3)),
keras.layers.Dense(784, activation = 'relu'),
keras.layers.Dense(128, activation = 'relu'),
keras.layers.Dense(10, activation = 'softmax')
])
model.compile(optimizer = 'adam',
loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
Я получаю эту ошибку:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-27-93cf1c129e74> in <module>()
2 train_labels = readyLabels
3 test_images = testImages
----> 4 train_images = train_images / 255.0
5
6
TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'
Если кто-то может помочь, я бы очень ценю это, и я могу отправить или добавить любую необходимую информацию.