Это часть серии записей блога, связанных с внедрением искусственного интеллекта. Если вам интересна предыстория этой истории или то, как она происходит:
Ссылки на предыдущие записи блога |
---|
Как обучить масштабируемый классификатор с помощью 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 систем. Я также стремлюсь создать визуальное представление для сравнения различных моделей глубокого обучения, созданных в рамках экосистемы. Мы также обсудим визуализацию процесса обучения для создания эффективных моделей. Цель — создать библиотеку с открытым исходным кодом, где вы сможете масштабировать свои модели по своему усмотрению.