#python #jupyter-notebook #conv-neural-network
#python #jupyter-ноутбук #conv-нейронная сеть
Вопрос:
Пытаюсь загрузить данные из dataset в массив data[ ] , выдает ошибку трансляции.
код :
path = os.path.join(cur_path , r'Pothole_Image_Data')
print(path)
images = os.listdir(path)
for i in images :
try :
image = Image.open(path '\' i )
image = image.resize((50,50))
image = np.array(image)
data.append(image)
except :
print("Image not found")
data = np.array(data)
print(data.shape)
ошибка :
ValueError Traceback (most recent call last)
11 print("Image not found")
---> 13 data = np.array(data)
14 print(data.shape)
ValueError: could not broadcast input array from shape (50,50,3) into shape (50,50)
Ответ №1:
Изображения обычно загружаются в виде массивов X * Y * 3 (или 3 * X * Y), поскольку изображения хранят значения для красного, зеленого и синего значений пикселей. Так что либо преобразуйте их в массив 50,50,3 (создавая 4D N * 50 * 50 *3 ) массив или подумайте о том, как вы хотите объединить 3 цветовых канала.
Если вы хотите создать из него изображение в оттенках серого (которое можно сохранить в массиве 50×50), используйте, например, метод яркости: val = (0.3 * R) (0.59 * G) (0.11 * B).
Но это зависит от вашего приложения. Я предполагаю, что (учитывая способ построения массива изображений) он будет использоваться в нейронной сети? Тогда я бы просто использовал 3 канала. Tensorflow может справиться с этим, у Conv2d даже есть переменная для установки количества каналов.
Комментарии:
1. Добавлена эта строка: image = np.ones((50,50,3,1)) print(data.shape) , дает это : (618, 50, 50, 3, 1) Хорошо ли это делать?
2. Ах, это создает другое измерение. Что вы также можете попробовать, так это numpy.squeeze() , который удаляет любое измерение размера 1. Это было бы более аккуратным решением, если бы вы спросили меня.