#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)