Помечать изображения в python для классификации - PullRequest
0 голосов
/ 18 мая 2019

У меня ~ 1400 изображений в двух папках, где имя папки - это метка для изображения. Я перебираю каждую папку и добавляю ее в массив вместе с меткой. Позже я передаю его своей модели нейронной сети.

for folder in files:
   sdir = dir + "\\"
   sdir = sdir + folder
   print("inside loop " +sdir)
   count = 0
   for image in os.listdir(sdir):
     img = cv2.imread(image)
     count = count + 1
     if count <= 450:
       x_train.append(img)
       y_train.append(folder)
     else:
       x_test.append(img)
       y_test.append(folder)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))

Traceback (most recent call last):
  File "testing.py", line 43, in <module>
    model.fit(x_train,y_train, epochs=5)
  File "C:\Python\lib\site-packages\tensorflow\python\keras\engine\training.py", line 776, in fit
    shuffle=shuffle)
  File "C:\Python\lib\site-packages\tensorflow\python\keras\engine\training.py", line 2266, in _standardize_user_data
    'array or a list of arrays. You passed: x=' + str(x))
ValueError: Please provide as model inputs either a single array or a list of arrays.

1 Ответ

0 голосов
/ 18 мая 2019

Я полагаю, что ваша проблема связана с тем фактом, что files - это, вероятно, список строк и, следовательно, folder (который вы передаете в качестве метки для вашей сети) - это строка, тогда как сеть захочетцелочисленные метки.

Следовательно, в зависимости от того, сколько у вас меток (две, если я правильно понимаю), вы можете определить словарь

labels_to_ints = dict(zip(files,[0,1]))

, чтобы сопоставить ваши строки с целочисленными метками, а затем вместоy_train.append(folder), используйте

y_train.append(labels_to_ints[folder])

(и соответственно для y_test).

Конечно, есть другие способы выполнить это отображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...