Kitabı oku: «Нейросети. Генерация изображений», sayfa 3

Yazı tipi:

Методы сегментации:

– Пороговая сегментация (`cv2.threshold`) для разделения изображения на передний и задний план.

– Вычитание фона (`cv2.absdiff`) для удаления нежелательного фона из изображения.

Алгоритмы устранения:

– Морфологические операции (`cv2.erode`, `cv2.dilate`) для устранения мелких артефактов или шумов.

– Фильтры устранения шума (`cv2.fastNlMeansDenoising`) для удаления шумов с сохранением деталей.

Улучшение качества:

– Методы суперразрешения (`skimage.transform.resize`, `cv2.resize`) для увеличения размеров изображений с улучшением качества.

– Фильтры повышения резкости (`cv2.filter2D`, `skimage.filters.unsharp_mask`) для улучшения четкости изображений.

Для примера очистки изображений от шумов, мы будем использовать библиотеку `scikit-image`. Установите ее, если она еще не установлена, используя команду:

```bash

pip install scikit-image

```

Предположим, у нас есть изображение с шумом и мы хотим очистить его. Для этого используем фильтр Гаусса и медианный фильтр. Ниже приведен пример кода:

```python

import numpy as np

import matplotlib.pyplot as plt

from skimage import io, img_as_ubyte, img_as_float

from skimage.filters import gaussian, median

# Загрузим изображение с шумом

image_with_noise = io.imread('image_with_noise.jpg')

image_with_noise = img_as_float(image_with_noise)

# Применим фильтр Гаусса для устранения шума

image_gaussian_filtered = gaussian(image_with_noise, sigma=1)

# Применим медианный фильтр для устранения шума

image_median_filtered = median(image_with_noise)

# Выведем исходное изображение и обработанные изображения для сравнения

plt.figure(figsize=(10, 4))

plt.subplot(131)

plt.imshow(image_with_noise, cmap='gray')

plt.title('Исходное изображение с шумом')

plt.subplot(132)

plt.imshow(image_gaussian_filtered, cmap='gray')

plt.title('Фильтр Гаусса')

plt.subplot(133)

plt.imshow(image_median_filtered, cmap='gray')

plt.title('Медианный фильтр')

plt.tight_layout()

plt.show()

```

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

Пожалуйста, замените `'image_with_noise.jpg'` на путь к вашему изображению с шумом.

***

Для работы с изображениями и их токенизации на отдельные символы или пиксели обычно используется библиотека Python `PIL` (Python Imaging Library), которая теперь известна как `Pillow`. `Pillow` является форком оригинальной библиотеки `PIL` и предоставляет мощные инструменты для работы с изображениями в Python.

Для токенизации изображения на отдельные символы или пиксели можно использовать методы из библиотеки `Pillow`, такие как `Image.getdata()` или `numpy.array`. Вот пример:

```python

from PIL import Image

# Загрузим изображение

image = Image.open('example_image.jpg')

# Токенизируем изображение на пиксели

pixel_data = list(image.getdata())

# Токенизируем изображение на символы (если оно содержит текстовую информацию)

# Необходимо использовать OCR (Optical Character Recognition) библиотеки для распознавания текста.

```

Здесь `Image.open()` открывает изображение, а `image.getdata()` возвращает пиксели изображения в виде списка. Обратите внимание, что при токенизации изображений на символы, если изображение содержит текстовую информацию, для распознавания текста потребуются специализированные библиотеки OCR (например, Tesseract или pytesseract).

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

***

Для удаления выбросов или аномальных значений на изображениях можно использовать различные инструменты и методы, которые предоставляют библиотеки для обработки изображений. Вот некоторые из них:

 Конкретные инструменты для удаления выбросов или аномальных значений могут отличаться в каждой библиотеке. Вот примеры инструментов из библиотек OpenCV и scikit-image:

OpenCV:

В OpenCV для удаления выбросов можно использовать функцию `cv2.GaussianBlur`, которая применяет фильтр Гаусса к изображению для сглаживания и устранения шумов:

```python

import cv2

# Загрузим изображение

image = cv2.imread('example_image.jpg')

# Применим фильтр Гаусса для удаления выбросов

image_filtered = cv2.GaussianBlur(image, (5, 5), 0)

```

Также в OpenCV доступны другие фильтры для обработки изображений, такие как медианный фильтр (`cv2.medianBlur`) или билатеральный фильтр (`cv2.bilateralFilter`), которые также могут использоваться для удаления шумов и аномалий.

scikit-image:

В scikit-image для удаления выбросов можно использовать функции из подмодуля `filters`, такие как `gaussian`, `median` и другие:

```python

from skimage import io, img_as_ubyte

from skimage.filters import gaussian, median

# Загрузим изображение

image = io.imread('example_image.jpg')

image = img_as_ubyte(image)

# Применим фильтр Гаусса для удаления выбросов

image_gaussian_filtered = gaussian(image, sigma=1)

# Применим медианный фильтр для удаления выбросов

image_median_filtered = median(image)

```

Здесь мы использовали функции `gaussian` и `median` из `skimage.filters` для применения фильтров Гаусса и медианного фильтра к изображению с целью удаления выбросов и шумов.

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

Разделение данных на обучающую и тестовую выборки

После предобработки данных следующим шагом является разделение их на обучающую и тестовую выборки. Этот процесс позволяет оценить производительность и качество модели на данных, которые она ранее не видела. Обучающая выборка будет использоваться для обучения GAN, а тестовая выборка будет использоваться для оценки, насколько хорошо модель обобщает на новых данных.

Обычно данные разделяют случайным образом в заданном соотношении, например, 80% данных используется для обучения, а оставшиеся 20% – для тестирования. В некоторых случаях может быть полезно использовать кросс-валидацию для более надежной оценки производительности модели.

В Python для разделения данных на обучающую и тестовую выборки часто используются библиотеки `scikit-learn` или `tensorflow.keras` (если вы работаете с нейронными сетями на базе TensorFlow). Вот примеры использования обеих библиотек:

С использованием scikit-learn:

```python

from sklearn.model_selection import train_test_split

# X – признаки (входные данные), y – метки (целевая переменная)

X, y = … # Ваши предобработанные данные

# Разделим данные на обучающую и тестовую выборки

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

```

В этом примере мы использовали функцию `train_test_split` из `sklearn.model_selection` для разделения данных `X` и `y` на обучающую и тестовую выборки в соотношении 80:20. Параметр `test_size=0.2` указывает на то, что 20% данных будут использоваться для тестирования, а `random_state=42` обеспечивает воспроизводимость разделения данных.

С использованием tensorflow.keras:

```python

import tensorflow as tf

# X – признаки (входные данные), y – метки (целевая переменная)

X, y = … # Ваши предобработанные данные

# Разделим данные на обучающую и тестовую выборки

X_train, X_test, y_train, y_test = tf.keras.train_test_split(X, y, test_size=0.2, random_state=42)

```

Если вы работаете с моделями, основанными на TensorFlow и Keras, вы можете использовать функцию `train_test_split` из `tensorflow.keras`, которая работает так же, как и в `scikit-learn`.

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

Создание итератора данных

При обучении GAN с большими объемами данных, использование итератора данных (data iterator) является эффективным подходом для эффективной загрузки данных в память и передачи их модели по мере необходимости. Это особенно важно при работе с большими наборами данных, которые не могут быть загружены целиком в память из-за ограничений на доступную оперативную память.

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

В Python для реализации итератора данных обычно используются библиотеки, такие как `tensorflow.data.Dataset` (для работы с TensorFlow) или `torch.utils.data.DataLoader` (для работы с PyTorch).

С использованием TensorFlow:

```python

import tensorflow as tf

# Загрузка данных из файла или другого источника

dataset = … # Ваш итерируемый набор данных, например, tf.data.Dataset

# Определение размера батча

batch_size = 32

# Создание итератора данных

data_iterator = dataset.batch(batch_size)

# Цикл обучения модели

for batch in data_iterator:

# Обучение модели на текущем батче данных

loss = model.train_on_batch(batch)

```

В этом примере мы использовали метод `batch()` из `tf.data.Dataset`, чтобы создать итератор данных, который будет возвращать батчи данных размером `batch_size` на каждой итерации. Внутри цикла обучения модели мы передаем текущий батч данных в модель для обучения с помощью метода `train_on_batch()`.

С использованием PyTorch:

```python

import torch

from torch.utils.data import DataLoader

# Загрузка данных из файла или другого источника

dataset = … # Ваш итерируемый набор данных, например, Dataset из torchvision или собственная реализация

# Определение размера батча

batch_size = 32

# Создание итератора данных

data_iterator = DataLoader(dataset, batch_size=batch_size, shuffle=True)

# Цикл обучения модели

for batch in data_iterator:

# Перенос данных на устройство (GPU, если доступно)

inputs, labels = batch

inputs, labels = inputs.to(device), labels.to(device)

# Обучение модели на текущем батче данных

loss = model.train_on_batch(inputs, labels)

```

В этом примере мы использовали класс `DataLoader` из `torch.utils.data`, чтобы создать итератор данных, который будет возвращать батчи данных размером `batch_size` на каждой итерации. Мы также перемешали данные (параметр `shuffle=True`), чтобы обучение было более эффективным.

Использование итератора данных позволяет эффективно обрабатывать большие объемы данных при обучении GAN и способствует более эффективному использованию доступной памяти.

Аугментация данных (при необходимости)

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

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

Примеры преобразований искажения данных, которые можно использовать для аугментации данных в GAN:

Отражение (зеркальное отражение): Отражение изображения по вертикальной или горизонтальной оси.

Поворот: Поворот изображения на случайный угол.

Сдвиг: Случайное смещение изображения на небольшое расстояние в горизонтальном и вертикальном направлениях.

Масштабирование: Изменение масштаба изображения на случайный коэффициент.

Изменение яркости и контраста: Внесение случайных изменений яркости и контраста.

Добавление шума: Добавление случайного шума к изображению.

Обрезка: Обрезка случайной части изображения.

Искажение формы: Изменение формы изображения, например, путем искажения перспективы.

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

Для аугментации данных в GAN можно использовать различные библиотеки и инструменты, которые предоставляют функциональность для применения различных преобразований к изображениям и другим типам данных. Ниже приведены некоторые популярные инструменты для аугментации данных в Python:

`imgaug` – это мощная библиотека для аугментации изображений. Она предоставляет множество преобразований, которые можно комбинировать и настраивать для разнообразной аугментации изображений. `imgaug` поддерживает различные типы аугментаций, такие как повороты, сдвиги, отражения, масштабирование, изменение яркости и контраста, добавление шума и многое другое.

`albumentations` – это быстрая и гибкая библиотека для аугментации изображений. Она также поддерживает разнообразные преобразования, которые можно комбинировать и настраивать. `albumentations` специально оптимизирована для обработки больших объемов данных и предоставляет простой API для применения аугментаций к изображениям.

`Augmentor` – это инструмент для аугментации изображений, который предоставляет простой интерфейс для применения различных преобразований, таких как повороты, отражения, масштабирование, изменение яркости и другие. Он также поддерживает создание пайплайнов аугментации для последовательной обработки наборов данных.

Если вы работаете с Keras, то библиотека `ImageDataGenerator` предоставляет базовую функциональность для аугментации изображений. Она поддерживает простые преобразования, такие как повороты, отражения, сдвиги и изменение яркости.

Если вы используете PyTorch, то модуль `torchvision.transforms` предоставляет функции для аугментации изображений, которые можно применять к датасетам перед обучением. Он также поддерживает простые преобразования, такие как повороты, отражения, сдвиги и изменение яркости.

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

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

Проверка целостности данных

Проверка корректности и целостности данных является важным этапом подготовки данных для обучения GAN. Неправильные или поврежденные данные могут сильно повлиять на качество обучения модели и привести к непредсказуемым результатам. Рассмотрим некоторые шаги, которые следует предпринять для проверки данных на корректность и целостность:

– Убедитесь, что все изображения открываются без ошибок. Произведите проверку на наличие битых или поврежденных изображений.

– Проверьте размеры изображений. Убедитесь, что все изображения имеют одинаковый размер или что они соответствуют ожидаемым размерам вашей модели GAN.

– Проверьте диапазон значений пикселей. В случае, если изображения должны быть нормализованы, убедитесь, что пиксели имеют значения в определенном диапазоне, например, от 0 до 1 или от -1 до 1.

– Убедитесь, что все необходимые метки или целевые переменные присутствуют и соответствуют правильным образцам данных.

– Проверьте наличие дубликатов в данных и решите, каким образом с ними следует обращаться (удалить, объединить и т. д.).

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

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

Обращайте особое внимание на этот этап, так как качество входных данных существенно влияет на результаты обучения GAN и общую эффективность модели.

Генерация искусственных данных (при необходимости)

Подход с использованием GAN для генерации искусственных данных является мощным инструментом в ситуациях, когда у нас ограниченное количество реальных данных или когда нам нужно улучшить производительность модели в условиях недостатка данных. Этот метод также называется "обучение без учителя" или "обучение без прецедентов".

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

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

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

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

1. Медицинские исследования: В медицинских областях данных может быть ограниченное количество, и сбор новых данных может быть затруднительным. GAN может помочь увеличить объем данных и создать реалистичные медицинские изображения, что полезно для тренировки моделей диагностики и обнаружения.

2. Обработка естественного языка: Для обучения моделей обработки текста или языковых моделей часто требуется большой объем данных. GAN может генерировать искусственные тексты, которые помогут улучшить качество моделей и способность к обобщению на различные текстовые данные.

3. Синтез изображений и видео: В области компьютерного зрения и обработки видео GAN может помочь сгенерировать искусственные изображения и видео, что может быть полезным для тренировки моделей, например, для улучшения разрешения изображений или заполнения отсутствующих кадров в видео.

4. Создание искусственных данных для обучения других моделей: GAN может использоваться для создания искусственных данных, которые затем будут использоваться для обучения других моделей, например, в задачах передачи обучения.

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

Для генерации искусственных данных с использованием GAN можно использовать следующие инструменты:

Основной инструмент для создания искусственных данных – это сама генеративная состязательная сеть (GAN). GAN состоит из генератора и дискриминатора, которые конкурируют друг с другом в процессе обучения. Генератор создает искусственные образцы данных, а дискриминатор старается отличить их от реальных. По мере обучения, генератор становится все лучше в создании реалистичных образцов данных.

Conditional GAN (cGAN) – это вариант GAN, в котором генератор и дискриминатор получают дополнительную информацию (условие) о данных, которые они должны сгенерировать или оценить. Это может быть полезным, если вы хотите управлять генерацией данных или контролировать, какие данные будут созданы.

Вариационные автоэнкодеры (VAE) – это другой тип генеративных моделей, которые также используются для создания искусственных данных. VAE использует вероятностные подходы для генерации данных и обеспечивает непрерывное латентное пространство, что делает их более удобными для контролируемой генерации данных.

StyleGAN и StyleGAN2 – это улучшенные версии GAN, специализирующиеся на синтезе высококачественных изображений. Они способны создавать изображения высокого разрешения с высокой детализацией, что делает их полезными для создания реалистичных изображений в различных задачах.

Deep Convolutional GAN (DCGAN) – это архитектура GAN, оптимизированная для работы с изображениями. DCGAN использует сверточные слои в генераторе и дискриминаторе, что помогает создавать качественные изображения.

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

CycleGAN – это тип GAN, который используется для переноса стиля или контента между различными доменами данных. Например, он может использоваться для преобразования изображений лошадей в изображения зебр, аудио голоса женщины в аудио голоса мужчины и т.д.

Эти инструменты и архитектуры GAN предоставляют мощные возможности для генерации искусственных данных в различных областях, включая изображения, текст, аудио и видео. Выбор конкретной архитектуры зависит от вашей задачи и требований.

Давайте рассмотрим пример генерации изображений цифр с использованием библиотеки TensorFlow и архитектуры DCGAN (Deep Convolutional GAN). В этом примере мы будем использовать GAN для генерации рукописных цифр MNIST.

#Импорт необходимых библиотек

import numpy as np

import matplotlib.pyplot as plt

import tensorflow as tf

from tensorflow.keras import layers, models

#Загрузка и предобработка данных MNIST

(train_images, _), (_, _) = tf.keras.datasets.mnist.load_data()

train_images = (train_images – 127.5) / 127.5

train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')

```

#Определение и компиляция моделей генератора и дискриминатора

def make_generator_model():

model = models.Sequential()

model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))

model.add(layers.BatchNormalization())

model.add(layers.LeakyReLU())

model.add(layers.Reshape((7, 7, 256)))

model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))

model.add(layers.BatchNormalization())

model.add(layers.LeakyReLU())

model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))

model.add(layers.BatchNormalization())

model.add(layers.LeakyReLU())

model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))

return model

def make_discriminator_model():

model = models.Sequential()

model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1]))

model.add(layers.LeakyReLU())

model.add(layers.Dropout(0.3))

model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same'))

model.add(layers.LeakyReLU())

model.add(layers.Dropout(0.3))

model.add(layers.Flatten())

model.add(layers.Dense(1))

return model

generator = make_generator_model()

discriminator = make_discriminator_model()

generator_optimizer = tf.keras.optimizers.Adam(1e-4)

discriminator_optimizer = tf.keras.optimizers.Adam(1e-4)

cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)

#Определение функций обучения и обновления моделей

@tf.function

def train_step(images):

noise = tf.random.normal([BATCH_SIZE, 100])

with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:

generated_images = generator(noise, training=True)

real_output = discriminator(images, training=True)

fake_output = discriminator(generated_images, training=True)

gen_loss = generator_loss(fake_output)

disc_loss = discriminator_loss(real_output, fake_output)

gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)

gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)

generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))

discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))

def generator_loss(fake_output):

return cross_entropy(tf.ones_like(fake_output), fake_output)

def discriminator_loss(real_output, fake_output):

real_loss = cross_entropy(tf.ones_like(real_output), real_output)

fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)

total_loss = real_loss + fake_loss

return total_loss

#Обучение моделей на реальных данных

EPOCHS = 100

BATCH_SIZE = 128

for epoch in range(EPOCHS):

for i in range(train_images.shape[0] // BATCH_SIZE):

batch = train_images[i * BATCH_SIZE:(i + 1) * BATCH_SIZE]

train_step(batch)

# Вывод сгенерированных изображений каждые 10 эпох

if (epoch + 1) % 10 == 0:

noise = tf.random.normal([25, 100])

generated_images = generator(noise, training=False)

fig, axs = plt.subplots(5, 5)

for i in range(5):

for j in range(5):

axs[i, j].imshow(generated_images[i * 5 + j, :, :, 0], cmap='gray')

axs[i, j].axis('off')

plt.show()

В результате обучения моделей, мы сможем сгенерировать изображения рукописных цифр, которые могут быть очень похожи на реальные изображения из набора данных MNIST. Это иллюстрирует, как GAN может генерировать искусственные данные, в нашем случае – рукописные цифры, на основе случайного шума.

Готовность к обучению

После выполнения всех предыдущих шагов вы готовы к обучению GAN на вашем наборе данных. Теперь вы можете использовать подготовленные данные и итераторы для обучения GAN и наблюдать, как модель постепенно улучшается и начинает создавать новые данные, соответствующие целевому домену.

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

Ücretsiz ön izlemeyi tamamladınız.

₺254,68
Yaş sınırı:
12+
Litres'teki yayın tarihi:
11 ağustos 2023
Yazıldığı tarih:
2023
Hacim:
227 s. 12 illüstrasyon
Telif hakkı:
Автор
İndirme biçimi:
epub, fb2, fb3, ios.epub, mobi, pdf, txt, zip

Bu kitabı okuyanlar şunları da okudu