Обучение искусственному интеллекту в масштабе

Это часть серии записей блога, связанных с внедрением искусственного интеллекта. Если вам интересна предыстория этой истории или то, как она происходит:

Ссылки на предыдущие записи блога
Как обучить масштабируемый классификатор с помощью FastAPI и SerpApi?
Автоматическое обучение с помощью FastAPI, Pytorch и SerpApi
Создание базы данных N1QL маркированных изображений с использованием Couchbase, FastAPI и SerpApi
Использование настраиваемого словаря для автоматического обучения сети с помощью FastApi, PyTorch и SerpApi
Расширение возможностей обучения с помощью данных SERP
Автоматическое обучение в масштабе

На предыдущей неделе мы рассмотрели, как использовать параметр фишки, отвечающий за сужение результатов, запрашивая изображения с определенной высотой в SerpApi’s Google Images Scraper API для обучения моделей машинного обучения. На этой неделе мы изучим, как автоматически обновлять набор данных изображений несколькими однотипными запросами, и увидим результаты в более масштабном глубоком обучении.

Что такое ИИ в масштабе?

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

Как сократить время обучения?

Используя чистые данные, можно уменьшить шум и получить эффективные модели искусственного интеллекта, которые могут превзойти другие ai модели. В компьютерном зрении этот аспект более важен, поскольку рабочие нагрузки значительно изменятся по сравнению с алгоритмами, отвечающими за nlp (обработку естественного языка).

Легкий скраппинг чистых данных

На предыдущей неделе я показал, как получить параметр chips вручную из поиска Google. SerpApi способен создавать список различных значений chips и подавать их под ключом suggested_searches.

Здесь следует отметить, что значение chips для разных запросов будет иметь разные значения. Однако вы можете получить значение chips для определенного запроса и использовать его на разных страницах для этого конкретного запроса.

Например, значение chips для запроса American Foxhound imagesize:500x500 и спецификации dog будет таким:

То же значение chips для American Hairless Terrier imagesize:500x500 является:

Как вы можете заметить, зашифрованная часть значения chips отличается. Поэтому вам нужно сделать как минимум один вызов SerpApi’s Google Images Scraper API, чтобы получить нужное значение chips.

Я добавил новый ключ desired_chips_name в наш класс Query для проверки результатов с нужным name в suggested_searches:

class Query(BaseModel):
    google_domain: str = "google.com"
    num: str = "100"
    ijn: str = "0"
    q: str
    chips: str = None
    desired_chips_name: str = None
    api_key: str ## You may replace this with `api_key: str = "Your API Key"`
Войти в полноэкранный режим Выход из полноэкранного режима

Также была необходима еще одна функция в классе Download для извлечения значения chips и использования его для поиска:

    def chips_serpapi_search(self):
        params = {
            "engine": "google",
            "ijn": self.query.ijn,
            "q": self.query.q,
            "google_domain": self.query.google_domain,
            "tbm": "isch",
            "num": self.query.num,
            "chips": self.query.chips,
            "api_key": self.query.api_key
        }

        search = GoogleSearch(params)
        results = search.get_dict()
        suggested_results = results['suggested_searches']
        chips = [x['chips'] for x in suggested_results if x['name'] == self.query.desired_chips_name]
        if chips != []:
            self.query.chips = chips[0]
            return chips[0]
Вход в полноэкранный режим Выйти из полноэкранного режима

Эта функция отвечает за вызов SerpApi с запросом и возвращает нужный параметр chips, а также обновляет его в классе Query.

Теперь, когда все необходимое для автоматического вызова с нужной спецификацией и добавления ее в наш набор данных ai model, используемый для обучения машинному обучению, готово, давайте объявим класс, который будет использоваться для выполнения нескольких запросов:

class MultipleQueries(BaseModel):
    queries: List = ["american foxhound"]
    desired_chips_name: str = "dog"
    height: int = 500
    width: int = 500
    number_of_pages: int = 2
    num: int = 100
    google_domain: str = "google.com"
    api_key: str ## You may replace this with `api_key: str = "Your API Key"`
Вход в полноэкранный режим Выход из полноэкранного режима

queries ключ здесь будет список запросов, между которыми вы хотите объявить класс. Например: Список пород собак

Определим функцию для автоматического вызова запросов по порядку и загрузки изображений в хранилище данных с их классификацией:

class QueryCreator:
    def __init__(self, multiplequery: MultipleQueries):
        self.mq = multiplequery

    def add_to_db(self):
        for query_string in self.mq.queries:
            if self.mq.height != None and self.mq.width != None:
                query_string = "{} imagesize:{}x{}".format(query_string, self.mq.height, self.mq.width)

            query = Query(google_domain = self.mq.google_domain, num = self.mq.num, ijn=0, q=query_string, desired_chips_name = self.mq.desired_chips_name, api_key = self.mq.api_key)
            db = ImagesDataBase()
            serpapi = Download(query, db)
            chips = serpapi.chips_serpapi_search()
            serpapi.serpapi_search()
            serpapi.move_all_images_to_db()

            if self.mq.number_of_pages > 1:
                for i in range(1,self.mq.number_of_pages):
                    query.ijn = i
                    query.chips = chips
                    db = ImagesDataBase()
                    serpapi = Download(query, db)
                    serpapi.serpapi_search()
                    serpapi.move_all_images_to_db()
Войти в полноэкранный режим Выход из полноэкранного режима

Мы запрашиваем SerpApi один раз с помощью chips_serpapi_search и затем используем значение chips для выполнения фактического поиска. Затем мы переместим все изображения в хранилище данных изображений для обучения моделей машинного обучения, которые мы создали в предыдущие недели.

Наконец, объявим конечную точку для этого в main.py:

@app.post("/multiple_query/")
def create_query(multiplequery: MultipleQueries):
  serpapi = QueryCreator(multiplequery)
  serpapi.add_to_db()
  return  {"status": "Complete"}
Вход в полноэкранный режим Выход из полноэкранного режима

Обучение в масштабе

Для наглядности мы будем использовать 8 видов американских пород собак. На самом деле, мы могли бы даже интегрировать SerpApi’s Google Organic Results Scraper API для автоматического получения Famous American Dog Breeds и запустить его с нашим ключом queries. Это выходит за рамки сегодняшней статьи в блоге. Но это хороший показатель многоцелевого использования SerpApi.

Если вы перейдете на игровую площадку по следующей ссылке, вас встретят желаемые результаты:

Теперь возьмем список в organic_result, и поместим его в наш объект MultipleQueries в конечной точке /multipl_query:

{
  "queries": [
     "American Hairless Terrier",
     "Alaskan Malamute",
     "American Eskimo Dog",
     "Australian Shepherd",
     "Boston Terrier",
     "Boykin Spaniel",
     "Chesapeake Bay Retriever",
     "Catahoula Leopard Dog",
     "Toy Fox Terrier"
  ],
  "desired_chips_name": "dog",
  "height": 500,
  "width": 500,
  "number_of_pages": 2,
  "num": 100,
  "google_domain": "google.com",
  "api_key": "<YOUR API KEY>"
}
Войти в полноэкранный режим Выход из полноэкранного режима

Этот словарь доставит нам 2 страницы (около 200 изображений) с высотой 500 и шириной 500, в Google US, с фишками значения dog (специально суженными до изображений только собак) для каждой введенной нами породы собак.

Вы можете наблюдать, что изображения загружаются в сервер хранения N1QL:

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

Теперь, когда у нас есть все необходимое, давайте обучим модель машинного обучения, различающую породы американских собак, в конечной точке /train со следующим словарем:

{
  "model_name": "american_dog_species",
  "criterion": {
    "name": "CrossEntropyLoss"
  },
  "optimizer": {
    "name": "SGD",
    "lr": 0.01,
    "momentum": 0.9
  },
  "batch_size": 16,
  "n_epoch": 5,
  "n_labels": 0,
  "image_ops": [
    {
      "resize": {
        "size": [
          500,
          500
        ],
        "resample": "Image.ANTIALIAS"
      }
    },
    {
      "convert": {
        "mode": "'RGB'"
      }
    }
  ],
  "transform": {
    "ToTensor": true,
    "Normalize": {
      "mean": [
        0.5,
        0.5,
        0.5
      ],
      "std": [
        0.5,
        0.5,
        0.5
      ]
    }
  },
  "target_transform": {
    "ToTensor": true
  },
  "label_names": [
     "American Hairless Terrier imagesize:500x500",
     "Alaskan Malamute imagesize:500x500",
     "American Eskimo Dog imagesize:500x500",
     "Australian Shepherd imagesize:500x500",
     "Boston Terrier imagesize:500x500",
     "Boykin Spaniel imagesize:500x500",
     "Chesapeake Bay Retriever imagesize:500x500",
     "Catahoula Leopard Dog imagesize:500x500",
     "Toy Fox Terrier imagesize:500x500"
  ]
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Модель искусственного интеллекта будет автоматически обучена в больших масштабах на изображениях, которые мы загрузили в набор данных, с помощью высокопроизводительной gpus моего компьютера в данном случае (также возможно обучение с помощью cpu):

Заключение

Я благодарен пользователям за их внимание, а также Brilliant People of SerpApi за то, что они сделали эту статью возможной. На этой неделе мы сосредоточились не на создании эффективных моделей с хорошими метриками, а на процессе автоматизации их создания. В последующие недели мы будем работать над устранением его недостатков и недостающих частей. К ним относятся возможность распределенного обучения для ml-моделей, поддержка всех оптимизаторов и критериев, добавление настраиваемых классов моделей, возможность обучения моделей машинного обучения на различных типах файлов (текст, видео), неэффективное использование конвейеров, использование различных инструментов data science, поддержка других библиотек машинного обучения, таких как tensorflow наряду с pytorch и т.д. Я не ставлю перед собой цель сделать ультрасовременный проект. Но я стремлюсь создать решение для легкого создания ai систем. Я также стремлюсь создать визуальное представление для сравнения различных моделей глубокого обучения, созданных в рамках экосистемы. Мы также обсудим визуализацию процесса обучения для создания эффективных моделей. Цель — создать библиотеку с открытым исходным кодом, где вы сможете масштабировать свои модели по своему усмотрению.

Оцените статью
devanswers.ru
Добавить комментарий