革新时尚:AI 与 GAN 的未来

革新时尚:AI 与 GAN 的未来

源节点: 2097935

介绍

想象一下这样一个世界:时装设计师永远不会耗尽新创意,我们穿的每件衣服都是一件艺术品。 听起来很有趣,对吧? 好吧,我们可以在通用对抗网络(GAN)的帮助下让这一切在现实中发生。 GAN 模糊了现实与想象之间的界限。 这就像一个 瓶中精灵 这满足了我们所有的创意愿望。 我们甚至可以借助 GAN 在地球上创造一个太阳,这在现实生活中是不可能的。 早在 2010 年代,Lan Goodfellow 和他的同事就引入了这个框架。 他们实际上旨在解决无监督学习的挑战,其中模型从未标记的数据中学习并生成新样本。 GAN 凭借其生成引人入胜且栩栩如生的内容的能力,给许多行业带来了革命性的变化,而时尚行业正在引领这一潜力。 现在我们将探索 GAN 的潜力并了解它们如何神奇地工作。

来源:维软咨询
来源:维软咨询

目录

  1. 生成对抗网络
  2. GAN 在机器学习和人工智能中的作用
  3. 挑战与局限
  4. 未来潜力
  5. 时尚 MNIST 数据集
  6. GAN 在时尚行业的应用
  7. 时尚 MNIST 数据集的实现
    1. 定义生成器模型
    2. 定义鉴别器模型
    3. 编译模型
    4. 产品培训
    5. 生成样本图像
  8. 结论

学习目标

在本文中,您将学习

  • 关于生成对抗网络 (GAN) 以及 GAN 的工作原理。
  • GAN 在机器学习和人工智能领域的作用
  • 我们还将看到使用 GAN 的一些挑战及其未来的潜力
  • 了解 GAN 的力量和潜力
  • 最后,GAN 在 MNIST 时尚数据集上的实现

生成对抗网络(GAN)

生成对抗网络是一类机器学习模型,用于生成新的现实数据。 它可以生成高度逼真的图像、视频等。 它只包含两个神经网络:生成器和判别器。

发生器

生成器是一个卷积神经网络,它生成判别器无法区分的数据样本。 在这里,生成器学习如何从噪声中创建数据。 它总是试图愚弄鉴别器。

判别器

鉴别器是一个反卷积神经网络,试图对生成器生成的真实样本和假样本进行正确分类。 判别器获取生成器生成的真实数据和虚假数据,并学习将其与真实数据区分开来。 鉴别器将给出 0 到 1 之间的分数作为生成图像的输出。 这里0表示图像是假的,1表示图像是真实的。 

对抗性训练

训练过程包括生成假数据,鉴别器尝试正确识别它。 它涉及两个阶段:生成器训练和判别器训练。 它还涉及优化生成器和鉴别器。 生成器的目标是生成与真实数据无法区分的数据,鉴别器的目标是识别真数据和假数据。 如果两个网络都正常工作,那么我们可以说模型已经优化。 他们都使用反向传播进行训练。 因此,每当发生错误时,错误都会被传播回来,并且它们将更新其权重。

GAN的训练通常有以下步骤:

  • 定义问题陈述
  • 选择架构
  • 根据真实数据训练判别器
  • 为生成器生成假输入 
  • 根据虚假数据训练鉴别器
  • 使用鉴别器的输出来训练生成器
  • 迭代和完善
来源:IBM 开发人员
来源:IBM 开发人员

损失函数

GAN 中使用的损失函数由两个组件组成,因为我们的架构中有两个网络。 在这种情况下,生成器的损失取决于它生成鉴别器无法区分的真实数据的能力。 它总是试图最小化鉴别器的能力。 另一方面,鉴别器的损失取决于它对真假样本的分类能力。 它试图尽量减少错误分类。 

在训练期间,生成器和鉴别器交替更新。 双方都试图将损失降到最低。 生成器试图通过为判别器生成更好的样本来减少其损失,而判别器则试图通过准确分类假样本和真实样本来减少其损失。 这个过程一直持续到 GAN 达到所需的收敛水平。 

GAN 在机器学习和人工智能中的作用

由于生成对抗网络能够生成新的真实数据,GAN 在机器学习和人工智能领域变得更加重要。 它有多种应用,如视频生成、图像生成、文本到图像合成等。这些彻底改变了许多行业。 让我们看看 GAN 在该领域如此重要的一些原因。

  1. 数据生成: 我们知道数据对于构建模型来说是最重要的。 我们需要大量的数据集来训练和构建更好的模型。 有时数据很稀缺,或者可能很昂贵。 在这种情况下,GAN 可以利用现有数据生成更多新数据。
  2. 资料私隐: 有时我们需要使用数据来训练模型,但这可能会影响个人的隐私。 在这种情况下,我们可以使用 GAN 创建与原始数据相似的数据并训练模型以保护个人隐私。
  3. 现实模拟: 这些可以创建对现实世界情况的准确模拟,并可用于创建机器学习模型。 例如,由于在现实世界中测试机器人可能存在风险或昂贵,因此我们可以利用它们来测试机器人。
  4. 对抗性攻击: GAN 可用于创建对抗性攻击,以测试机器学习模型的稳健性。 它有助于识别漏洞并有助于开发更好的模型并提高安全性。
  5. 创意应用: GAN 可用于生成人工智能的创意应用程序。 它们可用于创作游戏、音乐、艺术品、电影、动画、照片等等。 此外,它还可以创作原创作品,如故事、诗歌等。
来源:无聊的熊猫
来源:无聊的熊猫

随着 GAN 的研究仍在继续,我们可以期待这项技术在未来创造更多的奇迹。 未来.

挑战与局限

尽管 GAN 已经展示了生成真实且多样化数据的能力,但它仍然存在一些需要考虑的挑战和限制。 让我们看看 GAN 的一些挑战和局限性。

  • GAN 非常依赖训练数据。 生成的数据基于用于训练的数据。 这些将生成类似于训练数据的数据。 如果多样性有限,那么 GAN 也会生成多样性和质量有限的数据。
  • 训练 GAN 很困难,因为它们对网络架构和所使用的超参数的选择高度敏感。 这些很容易出现训练不稳定,因为生成器和鉴别器可能会陷入相互欺骗的循环中。 这会导致收敛性差,从而产生质量差的样本。
  • 如果生成器非常擅长区分真假样本,那么生成器将能够生成可以欺骗鉴别器进行区分的样本。 这导致产生彼此高度相似的样本,并且将能够生成涵盖数据集中全部可能性的样本。
  • 训练 GAN 的成本也很高。 训练 GAN 的计算成本可能很高,尤其是在处理大型数据集和复杂架构时。
  • GAN 最令人担忧的挑战之一是创建真实的虚假数据对社会的影响。 这可能会导致隐私问题、偏见或滥用。 例如,这些可能会生成虚假图像或视频,导致错误信息和欺诈。

未来潜力

尽管 GAN 存在一些挑战和局限性,但它有着潜在的光明前景。 包括医疗保健、金融和娱乐在内的许多行业预计将因 GAN 而经历一场革命。

  • 其中之一 潜在发展 将是生成医学。 它可以为他们生成个性化的医疗图像和治疗计划。 在这些 GAN 的帮助下,即使是医生也可以通过开发更有效的治疗方法来更好地治疗患者。
  • 它可用于创建虚拟现实环境。 这些非常现实并且有很多应用,例如娱乐。
  • 使用 GAN,我们可以创建更真实的模拟环境,可用于测试自动驾驶汽车。 这样我们就可以开发出更安全、更有效的自动驾驶汽车。
  • 这些不仅限于与图像相关的任务。 它们还可以用于自然语言处理(NLP)任务。 其中包括文本生成、翻译等等。 他们可以生成上下文相关的文本,这是构建虚拟助手和聊天机器人所必需的。
  • 这对于建筑师来说将会非常有帮助。 它可以为建筑物或任何其他结构产生新的设计。 这非常有助于建筑师和设计师创造更具创新性的设计。
  • 它还可以用于科学研究,因为它可以生成可以模仿现实世界现象的数据。 他们可以创建用于科学研究中测试和验证的合成数据,帮助药物开发和分子设计,并模拟复杂的物理过程。
  • GAN 还可以用于犯罪调查。 例如,我们可以使用嫌疑人的身份创建他们的图像。 这会带来更快、更成功的调查。

时尚 MNIST 数据集

它是用于各种目的的机器学习中的流行数据集。 它是原始 MNIST 数据集的替代品,原始 MNIST 数据集包含从 0 到 9 的数字。在我们的时尚 MNIST 数据集中,我们有各种时尚商品的图像而不是数字。 该数据集包含70000张图像,其中60000张是训练图像,10000张是测试图像。 它们每个都是 28 x 28 像素的灰度。 时尚 MNIST 数据集有 10 类时尚单品。 他们是:

  1. T恤衫
  2. 连衣裙
  3. 外套
  4. 拉过来
  5. 衬衫
  6. 裤子
  7. 檀香
  8. 运动鞋
  9. 脚踝靴
资料来源:研究之门
资料来源:研究之门

最初,创建该数据集是为了开发用于分类的机器学习模型。 该数据集甚至被用作评估许多机器学习算法的基准。 该数据集易于访问,可以从各种来源下载,包括 Tensorflow 和 PyTorch 库。 与原始的digits MINIST数据集相比,它更具挑战性。 模特必须能够区分具有相似形状或图案的各种时尚产品。 这使得它适合测试各种算法的鲁棒性。

GAN 在时尚行业的应用

由于 GAN 的出现,时尚行业经历了巨大的转变,它带来了创造力和变革。 GAN 彻底改变了我们设计、生产和体验时尚的方式。 让我们看看通用对抗网络(GAN)在时尚行业的一些实际应用。

  • 时装设计与生成: GAN 能够产生新的设计和新的时尚概念。 这有助于设计师创造创新且有吸引力的风格。 使用 GAN 可以探索各种组合、图案和颜色。 例如,服装店 H&M 使用 GAN 为其产品开发新鲜服装。
  • 虚拟试穿: 虚拟试衣是一个虚拟试衣间。 在此过程中,GAN 可以生成更真实的顾客穿着服装的图像。 因此,顾客无需实际穿着这些服装,就能真正知道自己穿着这些服装的样子。
来源:奥格雷
来源:奥格雷
  • 时尚预测: GAN 也用于预测。 他们可以引领未来的时尚潮流。 这有助于时尚品牌创造新风格并紧跟潮流。
  • 织物和纹理合成: GAN 可以帮助设计师通过虚拟试验各种材料和图案来生成高分辨率织物纹理,而无需实际进行实际试验。 这有助于节省大量时间和资源,也有助于创新设计流程。

Fashion MNIST 数据集的实现

我们现在将使用生成对抗网络 (GAN) 通过 MNIST 时尚数据集生成时尚样本。 首先导入所有必需的库。

import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input
from tensorflow.keras.layers import Reshape
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import BatchNormalization
from tensorflow.keras.layers import Activation
from tensorflow.keras.layers import ZeroPadding2D
from tensorflow.keras.layers import LeakyReLU
from tensorflow.keras.layers import UpSampling2D
from tensorflow.keras.layers import Conv2D from tensorflow.keras.models import Sequential from tensorflow.keras.models import Model from tensorflow.keras.optimizers import Adam
import matplotlib.pyplot as plt
import sys

我们必须加载数据集。 这里我们使用时尚 MNIST 数据集。 这是张量流中的内置数据集。 所以我们可以直接使用tensorflow keras加载它。 该数据集主要用于分类任务。 如前所述,它具有像素 28 x 28 的灰度图像。我们只需要一组训练数据。 因此,我们将其分为训练数据集和测试数据集,并仅加载训练集。

然后加载的数据在-1和1之间进行归一化。我们通常进行归一化以提高深度学习模型在训练过程中的稳定性和收敛性。 这是大多数深度学习任务中的常见步骤。 最后,我们将为数据数组添加一个额外的维度。 因为我们需要匹配生成器的预期输入形状。 生成器需要 4D 张量。 它表示批量大小、高度、宽度和通道数。

# Load fashion dataset
(X_train, _), (_, _) = tf.keras.datasets.fashion_mnist.load_data()
X_train = X_train / 127.5 - 1.
X_train = np.expand_dims(X_train, axis=3)

设置生成器和鉴别器的尺寸。 这里 gen_input_dim 是生成器输入的大小,在下一行中定义生成器生成的图像的形状。 这里它是 28 x 28 并且是灰度的,因为我们只提供一个通道。

gen_input_dim = 100
img_shape = (28, 28, 1)

定义生成器模型

现在我们将定义生成器模型。 它只需要一个参数,那就是输入维度。 它使用 keras 顺序 API 来构建模型。 它具有三个完全连接的层,具有 LeakyReLU 激活函数和批量标准化。 在最后一层,它使用 tanh 激活函数来生成最终的输出图像。 最后,它返回一个 keras 模型对象,该对象将噪声向量作为输入并给出生成的图像作为输出。

def build_generator(input_dim): model = Sequential() model.add(Dense(256, input_dim=input_dim)) model.add(LeakyReLU(alpha=0.2)) model.add(BatchNormalization(momentum=0.8)) model.add(Dense(512)) model.add(LeakyReLU(alpha=0.2)) model.add(BatchNormalization(momentum=0.8)) model.add(Dense(1024)) model.add(LeakyReLU(alpha=0.2)) model.add(BatchNormalization(momentum=0.8)) model.add(Dense(np.prod(img_shape), activation='tanh')) model.add(Reshape(img_shape)) noise = Input(shape=(input_dim,)) img = model(noise) return Model(noise, img)

定义鉴别器模型

下一步是构建一个鉴别器。 它几乎与生成器模型相似,但这里它只有两个完全连接的层,并且最后一层具有 sigmoid 激活函数。 它将噪声向量作为输入返回模型对象作为输出,并输出图像是真实的概率。

def build_discriminator(img_shape): model = Sequential() model.add(Flatten(input_shape=img_shape)) model.add(Dense(512)) model.add(LeakyReLU(alpha=0.2)) model.add(Dense(256)) model.add(LeakyReLU(alpha=0.2)) model.add(Dense(1, activation='sigmoid')) img = Input(shape=img_shape) validity = model(img) return Model(img, validity)

编译模型

现在我们必须编译它们。 我们使用二元交叉熵损失和 Adam 优化器来编译判别器和生成器。 我们将学习率设置为 0.0002,衰减率设置为 0.5。 使用二元交叉熵损失函数构建和编译鉴别器模型,该函数广泛用于二元分类任务。 还定义了准确度指标来评估鉴别器。 

类似地,构建了一个生成器模型,为生成器创建了架构。 这里我们不会像编译鉴别器那样编译生成器。 它将以对抗鉴别器的方式进行训练。 z 是代表生成器随机噪声的输入层。 生成器将 z 作为输入并生成 img 作为输出。 在组合模型的训练过程中,鉴别器的权重被冻结。 生成器的输出将被馈送到鉴别器并生成有效性,以衡量生成图像的质量。 然后使用 z 作为输入和有效性作为输出来创建组合模型。 这用于训练生成器。

optimizer = Adam(0.0002, 0.5)
discriminator = build_discriminator(img_shape)
discriminator.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
generator = build_generator(gen_input_dim)
z = Input(shape=(gen_input_dim,))
img = generator(z)
discriminator.trainable = False
validity = discriminator(img)
combined = Model(z, validity)
combined.compile(loss='binary_crossentropy', optimizer=optimizer)

产品培训

是时候训练我们的 GAN 了。 我们知道它运行了 epochs 迭代次数。 在每次迭代中,从训练集中获取一批随机图像,并由生成器通过传递噪声生成一批假图像。

鉴别器接受真实图像和假图像的训练。 并计算平均损失。 生成器接受噪声训练并计算损失。 这里我们将sample_interval定义为1000。因此,每1000次迭代,都会打印损失。

# Train GAN
epochs = 5000
batch_size = 32
sample_interval = 1000
d_losses = []
g_losses = [] for epoch in range(epochs): idx = np.random.randint(0, X_train.shape[0], batch_size) real_images = X_train[idx] # Train discriminator noise = np.random.normal(0, 1, (batch_size, gen_input_dim)) fake_images = generator.predict(noise) d_loss_real = discriminator.train_on_batch(real_images, np.ones((batch_size, 1))) d_loss_fake = discriminator.train_on_batch(fake_images, np.zeros((batch_size, 1))) d_loss = 0.5 * np.add(d_loss_real, d_loss_fake) d_losses.append(d_loss[0]) # Train generator noise = np.random.normal(0, 1, (batch_size, gen_input_dim)) g_loss = combined.train_on_batch(noise, np.ones((batch_size, 1))) g_losses.append(g_loss) # Print progress if epoch % sample_interval == 0: print(f"Epoch {epoch}, Discriminator loss: {d_loss[0]}, Generator loss: {g_loss}")

生成样本图像

现在让我们看看一些生成的示例。 在这里,我们绘制了一个包含这些样本的 5 行 10 列的网格。 这是用 matplotlib 创建的。 这些生成的样本与我们用于训练的数据集类似。 我们可以通过训练更多时期来生成质量更好的样本。

# Generate sample images
r, c = 5,10
noise = np.random.normal(0, 1, (r * c, gen_input_dim))
gen_imgs = generator.predict(noise) # Rescale images 0 - 1
gen_imgs = 0.5 * gen_imgs + 0.5 # Plot images
fig, axs = plt.subplots(r, c)
cnt = 0
for i in range(r): for j in range(c): axs[i,j].imshow(gen_imgs[cnt,:,:,0], cmap='gray') axs[i,j].axis('off') cnt += 1
plt.show()
资料来源:作者
资料来源:作者

结论

生成对抗网络 (GAN) 因其独特的架构、训练过程以及生成数据的能力而成为许多应用程序中最受欢迎的选择。 与任何技术一样,GAN 也存在一些挑战和局限性。 研究人员正在努力最大限度地减少它们并渴望更好的 GAN。 总的来说,我们已经了解并理解了 GAN 的力量和潜力及其工作原理。 我们还构建了一个 GAN,使用时尚 MNIST 数据集生成时尚样本。 

  • 这些是为各种应用生成新数据样本的强大工具。 正如本文所论证的,它可以彻底改变许多行业,时尚就是其中之一。
  • 根据 GAN 生成数据的能力和特征,GAN 分为不同类型。 例如,我们有用于生成图像的 DCGAN、用于图像到图像转换的条件 GAN、风格 GAN 等。
  • GAN 的一大优势是训练和构建机器学习模型不会出现数据短缺的情况。
  • 它的创造力是无限的,可以统治世界 人工智能和机器学习的未来。 且看未来它会创造怎样的奇迹。

希望您觉得这篇文章有用。

与我联系 LinkedIn.

谢谢!!!

时间戳记:

更多来自 分析维迪亚