Применение алгоритмов машинного обучения в наборе данных Google Quickdraw - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь применить алгоритмы машинного обучения, доступные в пакете scikit-learn в python, для предсказания имен каракули из набора изображений каракули.

Так как я - новичок в машинном обучении, и у меня нет знанийо том, как работает нейронная сеть. Я хотел попробовать с алгоритмами scikit-learn.

Я скачал каракули (для кошек и гитар) с помощью API с именем quickdraw .

Затем я загружаюизображения со следующим кодом

import numpy as np
from PIL import Image
import random

#To hold image arrays
images = []

#0-cat, 1-guitar
target = []

#5000 images of cats and guitar each
for i in range(5000):

   #cat images are named like cat0.png, cat1.png ...
   img = Image.open('data/cats/cat'+str(i)+'.png')
   img = np.array(img)
   img = img.flatten()
   images.append(img)
   target.append(0)

   #guitar images are named like guitar0.png, guitar1.png ...
   img = Image.open('data/guitars/guitar'+str(i)+'.png')
   img = np.array(img)
   img = img.flatten()
   images.append(img)
   target.append(1)

random.shuffle(images)
random.shuffle(target)

Затем я применил алгоритм: -

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(images,target,test_size=0.2, random_state=0)

from sklearn.naive_bayes import GaussianNB
GB = GaussianNB()
GB.fit(X_train,y_train)
print(GB.score(X_test,y_test))

После запуска вышеуказанного кода (с другими алгоритмами, такими как SVM, MLP тоже), Моя система простозамерзает. Я сделал принудительное отключение, чтобы вернуться. Я не уверен, почему это происходит.

Я попытался уменьшить количество загружаемых изображений, изменив

for i in range(5000):

на

for i in range(1000):

Но я толькополучить точность около 50%

1 Ответ

1 голос
/ 13 октября 2019

Прежде всего, если можно так выразиться:

Так как я начинающий в машинном обучении и не знаю, как> работает нейронная сеть. Я хотел попробовать с алгоритмами scikit-learn.

Это не очень хороший способ приблизиться к ML в целом, я настоятельно рекомендую вам начать изучать основы по крайней мере, иначе вы не сможетерассказать, что происходит вообще (это не то, что вы можете выяснить, попробовав это).

Возвращаясь к вашей проблеме, применение наивных байесовских методов к необработанным изображениям - это не очень хорошая стратегия: проблема в том, что каждый пиксельваше изображение является функцией , а с изображениями вы можете легко получить очень большое количество измерений (также при условии, что каждый пиксель не зависит от своих соседей, это не то, что вам нужно). NB обычно используется с документами, и рассмотрение этого примера в wikipedia может помочь вам немного лучше понять алгоритм.

Короче говоря, NB сводится к вычислению совместных условных вероятностей, которое сводится кк подсчету совпадений функций ( слов в примере из Википедии), являющихся сопутствующими явлениями пикселей в вашем случае, что, в свою очередь, сводится к вычислению огромныхМатрица вхождений, необходимая для формулирования модели NB.

Теперь, если ваша матрица состоит из всех слов в наборе документов, это может стать довольно дорогостоящим как по времени, так и по времени. пробел (O (n ^ 2) / 2), где n равно числу признаков ;вместо этого, представьте, что матрица состоит из ВСЕХ пикселей в вашем тренировочном наборе, как вы делаете в своем примере ... это очень быстро взрывается.

Вот почему сокращение вашего набора данных до 1000 изображений позволяет вашему ПКне хватает памяти. Надеюсь, это поможет.

...