В
Наш искусственный интеллект не будет распознавать все объекты, по типу: машин, других животных, людей и тому прочее. Не будет он это делать по одной причине. Мы в качестве датасета или же, другими словами, набора данных для тренировки – будем использовать датасет от компании Microsoft. В датасете у них собрано более 25 000 фотографий котов и собачек, что даст нам возможность натренировать правильные весы для распознавания наших собственных фото.
Мы не будем сами искать варианты для обучения нейронной сети и на это есть два фактора:
По этой причине для нашей программы мы воспользуемся готовым набором данных.
В прошлой статье мы использовали лишь одну библиотеку – numpy
. Без этой библиотеки нам не обойтись и в этот раз.
Numpy – библиотека, что позволяет поддерживать множество функций для работы с массивами, а также содержит поддержку высокоуровневых математических функций, предназначенных для работы с многомерными массивами.
По причине того, что нейронные сети – это математика, массивы и наборы данных, то без numpy – не обойтись.
Также мы будем использовать библиотеку Tensorflow. Она создана компанией Google и служит для решения задач построения и тренировки нейронной сети. За счет неё процесс обучение нейронки немного проще, нежели при написании с использованием только numpy.
Ну и последняя, но не менее важная – библиотека Matplotlib. Она служит для визуализации данных двумерной графикой. На её основе можно построить графики, изображения и прочие визуальные данные, которые человеком воспринимаются гораздо проще и лучше, нежели нули и единицы.
В качестве среды разработки мы будем использовать специальный сервис от Google - Colab. Colab позволяет любому писать и выполнять произвольный код Python через браузер и особенно хорошо подходит для машинного обучения, анализа данных и обучения.
Colab полностью бесплатен и позволяет выполнять код блоками. К примеру, мы можем выполнить блок кода, где у нас идет обучение нейронки, а далее мы можем всегда выполнять не всю программу с начала и до конца, а лишь тот участок кода, где мы указываем новые данные для тестирования уже обученной нейронки.
Такой принцип существенно экономит время и по этой причине мы и будем использовать сервис Google Colab.
Полная разработка проекта показывается в видео. Вы можете просмотреть его ниже:
Полезные ссылки:
Код для реализации проекта из видео:
# Импорт библиотек и классов
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout
import matplotlib.pyplot as plt
from google.colab import files
# Подгрузка датасета от Microsoft
train, _ = tfds.load('cats_vs_dogs', split=['train[:100%]'], with_info=True, as_supervised=True)
# Функция для изменения размеров изображений
SIZE = (224, 224)
def resize_image(img, label):
img = tf.cast(img, tf.float32)
img = tf.image.resize(img, SIZE)
img /= 255.0
return img, label
# Уменьшаем размеры всех изображений, полученных из датасета
train_resized = train[0].map(resize_image)
train_batches = train_resized.shuffle(1000).batch(16)
# Создание основного слоя для создания модели
base_layers = tf.keras.applications.MobileNetV2(input_shape=(SIZE[0], SIZE[1], 3), include_top=False)
# Создание модели нейронной сети
model = tf.keras.Sequential([
base_layers,
GlobalAveragePooling2D(),
Dropout(0.2),
Dense(1)
])
model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy'])
# Обучение нейронной сети (наши картинки, одна итерация обучения)
model.fit(train_batches, epochs=1)
# Функция для подгрузки изображений
files.upload()
# Сюда укажите названия подгруженных изображений
images = []
# Перебираем все изображения и даем нейронке шанс определить что находиться на фото
for i in images:
img = load_img(i)
img_array = img_to_array(img)
img_resized, _ = resize_image(img_array, _)
img_expended = np.expand_dims(img_resized, axis=0)
prediction = model.predict(img_expended)
plt.figure()
plt.imshow(img)
label = 'Собачка' if prediction > 0 else 'Кошка'
plt.title('{}'.format(label))
А вы хотите стать программистом и начать разрабатывать самостоятельно ИИ или хотя бы использовать уже готовые для своих собственных проектов? Предлагаем нашу программу