Почему мои y_test и y_train хранятся как строка? Как преобразовать их в представление массива изображений?

#python #keras #conv-neural-network #tensorflow2.0

#python #keras #conv-нейронная сеть #tensorflow2.0

Вопрос:

Что я пытаюсь сделать, так это выполнить классификацию изображений, у меня есть папка, которая содержит набор данных в виде изображений. Хочу создать двоичный классификатор. Структура проекта выглядит следующим образом :

 -Dataset
    - Images folder
         - Images.jpg
    - Meta Images folder 
         - MetaImages.jpg 
 - Notebook.ipynb
 

Фрагмент для загрузки данных :

 data = []
labels = []
cur_path = os.getcwd()


path = os.path.join(cur_path , r'Pothole_Image_Data')

images = os.listdir(path)
for i in images   :
   try  :
      image =  Image.open(path   '\'    i )
      image = image.resize((50,50))
      image = np.array(image)
      image = np.ones((50,50,3,1))
      data.append(image)
      labels.append(i)
   except : 
        print("Image not found")
    

   data = np.array(data)
   labels = np.array(labels)
   data = np.squeeze(data)
   print(data.shape)
   print(labels.shape)
 

Вот фрагмент, в котором я разделил данные :

 X_train, X_test , y_train , y_test  = train_test_split(data, labels ,test_size = 0.3, random_state  = 1 )
print(X_train.shape , y_train.shape , X_test.shape , y_test.shape)
X_train = X_train.astype(np.float64)
X_test  = X_test.astype(np.float64)
print(y_test)
print(y_train)
 

Выходные данные для y_test и y_train дают мне строковый тип.

 (432, 50, 50, 3) (432,) (186, 50, 50, 3) (186,)
['381.jpg' '244.jpg' '300.jpg' '488.jpg' '12.jpg' '142.jpg' '312.jpg'
'233.jpg' '480.jpg' '583.jpg' '18.jpg' '110.jpg' '177.jpg' '16.jpg'
'208.jpg' '181.jpg' '77.jpg' '601.jpg' '535.jpg' '383.jpg' '363.jpg'
'346.jpg' '137.jpg' '232.jpg' '375.jpg' '72.jpg' '331.jpg' '499.jpg'
'86.jpg' '71.jpg' '418.jpg' '553.jpg' '153.jpg' '334.jpg' '518.jpg'
'1.jpg' '416.jpg' '52.jpg' '256.jpg' '358.jpg' '261.jpg' '280.jpg'
'159.jpg' '130.jpg' '267.jpg' '162.jpg' '377.jpg' '475.jpg' '423.jpg'
'246.jpg' '325.jpg' '396.jpg' '89.jpg' '595.jpg' '471.jpg' '546.jpg'
'391.jpg' '62.jpg' '519.jpg' '174.jpg' '557.jpg' '615.jpg' '95.jpg'
'221.jpg' '505.jpg' '144.jpg' '569.jpg' '191.jpg' '40.jpg' '493.jpg'
'465.jpg' '97.jpg' '243.jpg' '219.jpg' '83.jpg' '67.jpg' '333.jpg' ... ] 
 

Ответ №1:

Вы можете использовать библиотеку tf.keras.preprocessing.image_dataset_from_directory для чтения изображений и разделения на набор данных для обучения и проверки. Более подробную информацию о классификации изображений с использованием Tensorflow можно найти здесь . Спасибо

 path = os.path.join(cur_path , r'Pothole_Image_Data')
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  path,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  path,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)