👏🏻 你好!欢迎访问「AI免费学习网」,0门教程,教程全部原创,计算机教程大全,全免费!

1 生成式AI的定义

在数字化飞速发展的今天,生成式AI(Generative AI)正逐渐成为科技领域中的一颗璀璨明珠。那么,什么是生成式AI呢?以下是对这一术语的详细定义和理解。

生成式AI的定义

生成式AI是指一种能够根据输入数据生成新内容的人工智能技术。与传统的识别性AI(如分类或预测模型)不同,生成式AI具有“创造”的能力,它能够生成文本、图像、音频甚至视频等多种形式的输出。

关键特征

  1. 数据驱动:生成式AI依赖于大量的数据进行训练,从中学习数据的结构、模式和特征。例如,某个文本生成模型可能会使用数百万篇文章进行训练,以理解语言的构造。

  2. 多样性与创造性:生成式AI不仅可以生成内容,还能够生成多样化的结果。例如,一个生成图像的模型可以基于给定的一些特征(如风格、色彩)生成多种不同的图像。

  3. 自适应:生成式AI可以根据用户提供的提示或样本进行调整和优化。比如,在生成音乐时,用户可以指定曲调的风格,而模型将根据该风格生成新的乐曲。

实际案例

以下是一些生成式AI的实际应用案例:

  • 文本生成:OpenAI的GPT-3是一个强大的文本生成模型,可以基于用户的提示生成连贯的文章、故事或对话。例如,用户输入“写一首关于春天的诗”,模型可能会生成如下内容:

    1
    2
    3
    4
    春天来了,万物复苏,
    花儿争艳,草绿如画。
    清风拂面,阳光温暖,
    这是生命的新篇章。
  • 图像生成:DALL-E是一个可以根据文本描述生成图像的模型。用户输入“一个在星空下的独角兽”,模型就能够生成与之相符的独特图像。

  • 音乐生成:Google的Magenta项目能够生成新的音乐作品。用户可以提供一些旋律或和声,系统便能创作出新的乐曲,甚至可以基于不同风格(如古典、爵士)生成音乐。

生成式AI的技术基础

生成式AI主要采用两大类技术:生成对抗网络(GANs)变分自编码器(VAEs)

  • 生成对抗网络(GANs):由两个神经网络(生成器和判别器)组成。生成器负责生成新数据,而判别器负责判断生成的数据是否真实。二者相互对抗,通过不断优化,生成器可以产生越来越逼真的数据。

  • 变分自编码器(VAEs):这是一种特殊的自编码器,能够学习输入数据的潜在分布,然后从中生成新的数据。VAEs常用于生成图像和音乐。

示例代码

以下是一个使用TensorFlow库创建简单GAN的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers

# 定义生成器
def build_generator():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_dim=100))
model.add(layers.Dense(784, activation='sigmoid'))
return model

# 定义判别器
def build_discriminator():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(784,)))
model.add(layers.Dense(1, activation='sigmoid'))
return model

# 生成器和判别器实例
generator = build_generator()
discriminator = build_discriminator()

# 编译判别器
discriminator.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# 创建GAN模型
discriminator.trainable = False
gan_input = layers.Input(shape=(100,))
generated_image = generator(gan_input)
gan_output = discriminator(generated_image)
gan = tf.keras.Model(gan_input, gan_output)
gan.compile(loss='binary_crossentropy', optimizer='adam')

总结

生成式AI是一种具有广泛应用潜力的技术,它正为创意产业、游戏设计、内容生产等领域带来革命性的变化。通过不断的发展,这项技术将继续演进,推动新的创新模式。

在下文中,我们将深入探讨生成式AI的发展历程,以更好地理解这种技术的起源及其未来的发展方向。

分享转发

2 生成式AI概述之生成式AI的历史背景

在探讨生成式AI之前,了解其历史背景有助于我们更好地领悟这一领域的发展轨迹以及技术进步的关键节点。生成式AI是一种能够生成各种内容(包括文本、图像、音频等)的模型,其历史可以追溯到计算机科学发展早期的几个重要阶段。

早期阶段:基础 matemática 和智能的萌芽

生成式AI的理念根源于算法、概率模型和人工智能的初步探索。1950年代,阿兰·图灵提出的“图灵测试”开启了对机器智能的思考。虽然当时的技术水平有限,但这一时期的研究为日后的生成式AI奠定了基础。

  • 案例: 例如,1956年的达特茅斯会议上,众多研究者讨论了计算机是否能够模拟人类智能。在这个历史背景下,诸如“能够生成自然语言”的想法并不鲜见。

神经网络的兴起与复苏

进入1980年代,神经网络的概念被重新提起,尤其是反向传播算法的提出,使得深度学习的研究逐渐兴起。尽管早期的神经网络相对简单,但随着计算能力的提升和数据集的丰富,研究者们开始探索更为复杂的生成模型。

  • 案例: 1990年代,Yann LeCun等人提出了卷积神经网络(CNN),为后来的图像生成奠定了基础。此时的研究仍以理论和小规模实验为主。

随机过程与生成模型

在这个阶段,研究者们开始关注“随机过程”,尤其是“隐马尔可夫模型(HMM)”和“生成对抗网络(GAN)”的相关研究,后者的提出标志着生成式AI迈出了重要的一步。

  • 案例: 2014年,Ian Goodfellow提出的GAN模型通过两个相互竞争的网络(生成器和鉴别器)创造性地生成新的数据样本,极大地推动了生成式AI的发展。

深度学习的黄金时代

进入21世纪的第二个十年,尤其是2014年之后,深度学习开始在各个领域取得突破性进展。这一阶段标志着生成式AI进入了“黄金时代”。尤其是在文本和图像的生成方面,研究者们构建了许多创新的模型。

  • 文本生成方面: Google的Transformer模型在2017年横空出世,为自然语言处理领域带来了革命性的变化。基于Transformer架构的GPT(生成式预训练变换模型)系列模型开始崭露头角,大幅提升了文本生成的能力。

  • 图像生成方面: 随着生成对抗网络的不断优化,DeepArt等工具让普通用户能够将自己的照片转换成艺术作品,展示了生成式AI的广泛应用潜力。

生成式AI的伦理问题与应用场景

随着技术的成熟,生成式AI与社会伦理问题也逐渐浮出水面。例如,假冒信息生成、隐私泄露等问题引发了公众的讨论。这也促使研究者们开始致力于构建负责任的生成模型。

  • 应用场景: 除了内容创作和艺术领域,生成式AI在教育、医学图像生成等方面也得到了应用。研究者们利用生成的医学影像辅助医生进行疾病诊断。

总结与展望

生成式AI的历史发展是一个从理论走向实践、从简单到复杂的过程。以其丰富的应用潜力,生成式AI已成为现代科技的重要组成部分。理解其历史背景不仅有助于我们洞察当前的发展状态,也能为未来的创新提供启示。

在接下来的文章中,我们将进一步探讨生成式AI的当前发展,分析其在各个领域的成就与面临的挑战。

分享转发

3 生成式AI概述之当前发展

在前一篇中,我们探讨了生成式AI的历史背景,了解了这一领域的发展轨迹和关键里程碑。随着技术的不断进步,生成式AI如今已经进入了一个前所未有的快速发展阶段。本文将深入探讨生成式AI当前的状态、技术创新以及应用场景。

当前发展趋势

1. 技术进步

生成式AI的技术在过去几年里取得了显著突破,特别是在以下几个方面:

  • 模型架构:如 Transformers 的出现大幅提升了生成效果。这些模型通过自注意力机制,有效地捕捉输入数据中长距离的依赖关系。

  • 预训练和微调方法:大规模的预训练使得模型能够在各种任务上更好地适应,减少了高质量标签数据的需求。例如,GPTBERT 等模型的出现使得NLP领域的许多任务达到了新的性能高点。

  • 控制生成过程:研究人员们正在探索如何更好地控制生成内容的属性,包括风格、语气以及内容的特定主题。这使得生成的结果能够更符合用户需求。

2. 应用场景

生成式AI的应用已经渗透到多个行业,以下是一些典型的案例:

  • 文本生成:如 OpenAIChatGPT 系列模型可用于客服、内容创作、编程帮助等。他们通过对话交互生成符合上下文的自然语言,如下例所示:
1
2
3
4
5
6
7
8
9
10
11
import openai

# 使用ChatGPT生成代码
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "请生成一个Python函数来计算斐波那契数列。"}
]
)

print(response['choices'][0]['message']['content'])

输出示例可能是:

1
2
3
4
5
6
7
8
9
10
def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
a, b = 0, 1
for _ in range(2, n+1):
a, b = b, a + b
return b
  • 图像生成:工具如 DALL-EStable Diffusion 利用生成对抗网络(GAN)生成高质量的图像,用户可以通过输入文本描述生成相应的图像。例如,用户输入“一个宇航员在月球上钓鱼”,模型将生成一幅相关的图像。

  • 音乐创作:生成式AI也被应用于音乐创作,比如 OpenAIMuseNet 能够生成不同风格的音乐,结合多样化的乐器与旋律模式。

3. 面临的挑战

尽管生成式AI发展迅速,但也面临一些挑战:

  • 道德和伦理问题:生成式AI可能被用于生成虚假信息、假新闻,甚至是深度伪造(deepfake)。合适的监管和使用规范显得尤为重要。

  • 模型偏见:模型训练所用的数据集质量及其代表性直接影响生成内容的客观性与公平性。存在性别、种族等文化偏见的问题亟待解决。

  • 计算资源限制:大规模模型的训练和运行通常需要巨大的计算资源,使得开发和部署成本高昂。

结论

当前,生成式AI正处于一个快速发展的阶段,其技术不断演进,应用场景丰富多样。然而,随之而来的挑战也不容忽视。在下一篇中,我们将深入探讨生成式AI的基础概念,具体介绍什么是机器学习,并在此基础上阐明生成式AI的逻辑与机制。

通过对当前发展状态的理解,我们可以期待生成式AI将继续在多个领域中发挥重要作用,推动技术革新与社会进步。

分享转发

4 什么是机器学习

在上一篇文章中,我们探讨了生成式AI的现状与未来发展。在今天的内容中,我们将深入了解生成式AI背后的一个重要基础概念——机器学习。在后续的章节中,我们会触及相关的深度学习主题。因此,了解机器学习的基本概念对于更好地理解生成式AI的运作方式至关重要。

机器学习的定义

机器学习(Machine Learning)是人工智能中的一个子领域,强调让计算机通过数据学习并做出决策,而无需明确编程。简单来说,机器学习允许系统从经验中进行学习、识别模式并作出预测。

机器学习的核心在于“学习”这一过程。通过分析大量的数据,计算机可以发现数据中的结构和规律,这些规律可以被用来进行预测和分类。

机器学习的类型

机器学习通常被分为三种主要类型:

  1. 监督学习(Supervised Learning):
    在这种学习方式中,模型被训练使用带有标签的数据集。这意味着输入数据集中的每个样本都有一个对应的输出标签。模型的目标是通过学习输入与输出之间的关系,来预测新的数据。

    案例:假设我们有一个包含房屋特征(面积、卧室数量等)和房屋价格的数据集。我们可以训练一个模型,使其能够预测给定新房屋特征时的价格。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    import pandas as pd

    # 假设我们有一个房屋数据集
    data = pd.read_csv('housing_data.csv')
    X = data[['area', 'bedrooms']] # 输入特征
    y = data['price'] # 输出标签

    # 划分训练和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # 创建线性回归模型
    model = LinearRegression()
    model.fit(X_train, y_train) # 训练模型

    # 预测新房屋
    new_house = [[2500, 3]] # 新房屋的特征
    predicted_price = model.predict(new_house)
    print(f"预测的房屋价格: {predicted_price[0]}")
  2. 无监督学习(Unsupervised Learning):
    与监督学习相反,无监督学习使用不带标签的数据集,模型的目标是从数据中找到潜在的结构或模式。

    案例:聚类算法是无监督学习的一个典型例子。我们可以使用无监督学习对客户进行细分,以便为他们提供更个性化的服务。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from sklearn.cluster import KMeans
    import numpy as np

    # 假设我们有一些客户的特征数据
    customer_data = np.array([[1, 2], [1, 4], [1, 0],
    [4, 2], [4, 0], [4, 4]])

    # 使用KMeans进行客户聚类
    kmeans = KMeans(n_clusters=2)
    kmeans.fit(customer_data)

    # 输出聚类结果
    print("聚类中心:", kmeans.cluster_centers_)
    print("客户标签:", kmeans.labels_)
  3. 强化学习(Reinforcement Learning):
    在强化学习中,代理通过与环境的交互来学习。它会根据当前状态采取行动,从而获取奖励或惩罚,优化其行为以最大化长期回报。

    案例:考虑一个玩游戏的机器人,机器人通过尝试不同的动作来学习最优策略,以便在游戏中获得最高分数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import numpy as np

    # 假设我们有一个简单的游戏环境
    class SimpleGame:
    def __init__(self):
    self.state = 0 # 初始状态

    def take_action(self, action):
    # 简单的环境反应
    if action == 'score':
    reward = 1
    else:
    reward = -1
    self.state += 1 # 假设只有一个状态变化
    return reward

    # 强化学习算法示例略

为什么机器学习如此重要?

  • 自动化决策:机器学习可以处理大量的数据并提供高效、准确的决策支持。
  • 个性化体验:无论是电商推荐还是社交媒体的内容推送,机器学习都能帮助企业为用户提供量身定制的产品与服务。
  • 处理复杂数据:群体行为、市场趋势等复杂现象,可以通过机器学习来分析和预测。

机器学习在生成式AI中的应用

生成式AI依赖于机器学习的能力,通过学习已有的样本集,它能够生成新的数据示例。这种生成能力正是通过深度学习(机器学习的一个分支)实现的,结合我们将在下一篇中详细探讨的深度学习概念。

了解机器学习的基本原理,能够帮助我们理解生成式AI如何生成逼真的文本、图像等多种数据形式。

总结

在这一篇中,我们探讨了机器学习的基本定义及其主要分类,并通过案例展示了监督学习、无监督学习和强化学习的实际应用。机器学习为生成式AI提供了基础,可以推动我们在人工智能领域的进一步探索。在下一篇中,我们将深入理解深度学习,以便拓展对生成式AI的理解。

请继续关注我们的系列教程,持续探索更多关于生成式AI的知识!

分享转发

5 深度学习简介

在上一篇文章中,我们探讨了什么是机器学习,了解了它的基本概念和应用。今天,我们将进一步深入,来看看深度学习这个更高级的领域。深度学习与传统的机器学习方法不同,它利用多层神经网络来处理和学习数据特征。接下来,我们将介绍深度学习的基本概念、常用模型、以及一些实际应用案例。

什么是深度学习?

深度学习是机器学习的一个子集,它使用包含多层(即“深层”)的人工神经网络来进行特征学习和表示。与传统机器学习方法需要手动提取特征不同,深度学习模型能够自动从数据中学习出层级化的特征表示。这种能力使得深度学习在许多任务中(如图像识别、自然语言处理等)表现出色。

神经网络的基础概念

在深入深度学习的概念之前,我们需要对神经网络有一个基本的了解。神经网络是由节点(也被称为“神经元”)和连接它们的边组成的图形结构。

  • 输入层:接受输入数据。
  • 隐藏层:进行特征提取和转换。可以有多个隐藏层,形成深度结构。
  • 输出层:给出预测结果或分类结果。

激活函数

在神经元的输出中,我们需要一个激活函数来决定是否激活该神经元。常见的激活函数包括:

  • Sigmoid: $f(x) = \frac{1}{1 + e^{-x}}$
  • ReLU: $f(x) = \max(0, x)$
  • Tanh: $f(x) = \tanh(x)$

激活函数的选择会影响模型的性能和训练速度。

反向传播算法

神经网络的训练通常使用反向传播算法,该算法通过计算损失函数相对于权重的梯度来更新权重,以最小化预测误差。常用的优化算法有梯度下降法及其变种,如Adam优化器。

深度学习的模型

卷积神经网络(CNN)

卷积神经网络特别擅长处理图像数据。CNN通过卷积层提取图像特征,利用池化层降低特征的维度,从而减小计算量。例如,在图像识别任务中,CNN能够通过自动学习特征(如边缘、形状)来分类图像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import tensorflow as tf
from tensorflow.keras import datasets, layers, models

# 加载 CIFAR-10 数据集
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# 归一化
train_images, test_images = train_images / 255.0, test_images / 255.0

# CNN 模型
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10)
])

# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])

# 训练模型
model.fit(train_images, train_labels, epochs=10)

循环神经网络(RNN)

循环神经网络用于处理序列数据(例如时间序列数据或文本)。RNN的结构使它能够利用前一个状态的信息来预测当前状态。例如,RNN可用于语言模型和机器翻译。

生成对抗网络(GAN)

在即将到来的文章中,我们将讨论生成对抗网络(GAN),这是另一种深度学习模型,能够生成新的数据实例。GAN包含两个部分——生成器和判别器,它们通过对抗过程互相提高性能。

深度学习的应用

深度学习的应用场景非常广泛,包括但不限于以下领域:

  • 图像处理:自动驾驶汽车、面部识别、医学影像分析等。
  • 自然语言处理:机器翻译、文本生成、情感分析等。
  • 语音识别:智能音箱、语音助手等。

小结

深度学习是一个充满潜力和挑战的领域,它通过多层神经网络自动学习复杂的特征表示,已在多个应用领域展现出优异的性能。在下一篇文章中,我们将继续探讨生成对抗网络(GAN),深入了解这个引人注目的生成模型的工作原理和应用。

在您深入研究深度学习的过程中,记得关注模型的选择、数据的准备以及超参数的调优,以便在您的实际项目中取得最佳效果!

分享转发

6 生成对抗网络(GAN)基础概念

在上一篇文章中,我们介绍了深度学习的基本概念和其广泛应用。今天,我们将深入探讨生成对抗网络(Generative Adversarial Networks,简称GAN),这是一种近年来在生成模型领域引起广泛关注的方法。GAN的核心思想是通过对抗过程实现高质量的数据生成。

GAN的基本结构

生成对抗网络由两个主要组成部分构成:生成器(Generator)和判别器(Discriminator)。它们之间的关系可以看作是一场“对抗游戏”。下面是这两个组件的简要介绍:

  1. 生成器: 生成器是一个模型,它旨在生成逼真的样本。其输入通常是随机噪声(通常为服从均匀分布或正态分布的随机向量),输出是经过训练生成的图像或其他数据。

  2. 判别器: 判别器也同样是一个模型,它的任务是区分输入样本是真实的(来自真实数据集)还是由生成器生成的(伪造样本)。通过不断训练,判别器能够提升其辨别能力。

GAN的训练过程

GAN的训练过程可以概述为以下几个步骤:

  1. 初始化生成器和判别器: 同时设定两个模型的初始参数。

  2. 训练循环:

    • 训练判别器: 不断地使用真实样本和生成样本,训练判别器去辨别它们。对于真实样本,判别器的目标输出为1,而对于生成的样本,目标输出为0。

    • 训练生成器: 利用当前的判别器输出,调整生成器的权重。生成器希望生成样本能够“欺骗”判别器,使其判断为真实样本。其目标是最大化判别器对生成样本的输出。

  3. 对抗过程: 两个模型进行“竞争”,生成器试图改善生成样本的质量,而判别器则努力提高识别伪造样本的能力。

最终,经过多次迭代,生成器生成的样本越来越接近真实样本,从而实现成功的生成。

数学推导

在数学层面,GAN的优化目标是通过最小化下面的损失函数来实现的:

$$
\min_G \max_D \mathbb{E}{x \sim P{data}(x)}[\log D(x)] + \mathbb{E}{z \sim P{z}(z)}[\log(1 - D(G(z)))]
$$

其中:

  • $D(x)$ 表示判别器网络对真实样本 $x$ 的预测概率。
  • $D(G(z))$ 表示判别器对生成样本的预测概率。
  • $G(z)$ 为生成器输出,$z$ 是输入的随机噪声。

通过对这两个网络进行交替优化,可以不断改善生成效果和判别能力。

案例:MNIST手写数字生成

为了更好地理解GAN,我们来看看一个实际的示例:使用GAN生成MNIST手写数字。

数据准备

首先,我们需要导入必要的库并准备训练数据:

1
2
3
4
5
6
7
8
import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist

# 加载MNIST数据集
(X_train, _), (_, _) = mnist.load_data()
X_train = X_train.astype(np.float32) / 255.0 # 归一化处理
X_train = np.expand_dims(X_train, axis=-1) # 扩展维度

构建生成器和判别器

接下来,我们构建生成器和判别器模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from keras.models import Sequential
from keras.layers import Dense, Reshape, Flatten, LeakyReLU

# 生成器
def build_generator():
model = Sequential()
model.add(Dense(256, input_dim=100))
model.add(LeakyReLU(alpha=0.2))
model.add(Dense(512))
model.add(LeakyReLU(alpha=0.2))
model.add(Dense(1024))
model.add(LeakyReLU(alpha=0.2))
model.add(Dense(28 * 28 * 1, activation='tanh'))
model.add(Reshape((28, 28, 1)))
return model

# 判别器
def build_discriminator():
model = Sequential()
model.add(Flatten(input_shape=(28, 28, 1)))
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'))
return model

generator = build_generator()
discriminator = build_discriminator()

训练GAN

然后我们设置GAN进行训练:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from keras.optimizers import Adam

# 编译判别器
discriminator.compile(loss='binary_crossentropy', optimizer=Adam(0.0002, 0.5), metrics=['accuracy'])

# 生成对抗网络
discriminator.trainable = False
gan_input = Sequential([generator, discriminator])
gan_input.compile(loss='binary_crossentropy', optimizer=Adam(0.0002, 0.5))

# 训练过程
def train_gan(epochs, batch_size):
for epoch in range(epochs):
# 选择随机的真实图像
idx = np.random.randint(0, X_train.shape[0], batch_size)
real_images = X_train[idx]

# 生成假图像
noise = np.random.normal(0, 1, (batch_size, 100))
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)

# 训练生成器
noise = np.random.normal(0, 1, (batch_size, 100))
g_loss = gan_input.train_on_batch(noise, np.ones((batch_size, 1)))

# 每1000次迭代打印损失情况
if epoch % 1000 == 0:
print(f"{epoch} [D loss: {d_loss[0]:.4f}, acc.: {100*d_loss[1]:.2f}%] [G loss: {g_loss:.4f}]")

train_gan(epochs=30000, batch_size=32)

在每次训练时,我们将实时生成的图像输出

分享转发

7 变分自编码器(VAE)

在生成式AI系列教程中,我们从生成对抗网络(GAN)开始,探讨了它的基本原理和应用。在本篇中,我们将深入研究变分自编码器(VAE),一种重要的生成模型,它在数据生成和特征学习中发挥着关键作用。

什么是变分自编码器(VAE)

变分自编码器(VAE)是一种深度学习模型,它通过学习数据的潜在表示,来生成与输入数据相似的新样本。与传统的自编码器不同,VAE通过变分推断来进行隐变量建模,旨在最大化数据的似然估计。

VAE的核心思想是将输入的数据压缩成一个潜在空间(latent space),并从这个潜在空间中重新生成数据。这种生成过程可以通过数学公式进行描述:

$$
p(x | z) = \mathcal{N}(x; \mu(z), \sigma^2(z))
$$

这里,$x$表示输入数据,$z$表示潜在变量,$\mu(z)$和$\sigma^2(z)$分别是基于潜在变量的生成输出的均值和方差。

VAE的组成

VAE由以下几个部分组成:

  1. 编码器(Encoder):将输入数据$x$映射到潜在空间中,输出潜在变量的均值$\mu$和方差$\sigma^2$。

    $$
    q(z | x) = \mathcal{N}(z; \mu(x), \sigma^2(x))
    $$

  2. 重参数化技巧:为了能够进行反向传播,VAE使用重参数化技巧,将随机采样的过程转换为确定性函数的组合:

    $$
    z = \mu(x) + \sigma(x) \cdot \epsilon \quad \text{其中 } \epsilon \sim \mathcal{N}(0, I)
    $$

  3. 解码器(Decoder):将潜在变量$z$映射回数据空间,以生成新的样本:

    $$
    p(x | z) = \mathcal{N}(x; \mu(z), \sigma^2(z))
    $$

  4. 损失函数:VAE的损失函数由两部分组成:

    • 重构损失(Reconstruction Loss):衡量生成样本与真实样本的相似度。
    • KL 散度(Kullback-Leibler Divergence):衡量潜在分布与先验分布的差异。

    最终的损失函数为:

    $$
    \mathcal{L}(x) = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x) || p(z))
    $$

VAE案例:手写数字生成

让我们通过一个具体的案例来理解VAE的工作原理。我们将使用PyTorch库实现一个VAE,用于生成手写数字(MNIST数据集)。

数据准备

首先,确保安装好PyTorch和相关库。然后,我们可以加载MNIST数据集:

1
2
3
4
5
6
7
8
import torch
from torchvision import datasets, transforms

# 数据变换
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
# 下载MNIST数据集
train_data = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(dataset=train_data, batch_size=32, shuffle=True)

VAE模型实现

接下来,我们定义VAE模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import torch.nn as nn
import torch.nn.functional as F

class VAE(nn.Module):
def __init__(self):
super(VAE, self).__init__()
self.fc1 = nn.Linear(28*28, 400)
self.fc21 = nn.Linear(400, 20) # 均值
self.fc22 = nn.Linear(400, 20) # 方差
self.fc3 = nn.Linear(20, 400)
self.fc4 = nn.Linear(400, 28*28)

def encode(self, x):
h1 = F.relu(self.fc1(x))
return self.fc21(h1), self.fc22(h1) # 均值和方差

def reparameterize(self, mu, logvar):
std = torch.exp(0.5 * logvar)
eps = torch.randn_like(std)
return mu + eps * std

def decode(self, z):
h3 = F.relu(self.fc3(z))
return torch.sigmoid(self.fc4(h3))

def forward(self, x):
mu, logvar = self.encode(x.view(-1, 28*28))
z = self.reparameterize(mu, logvar)
return self.decode(z), mu, logvar

训练模型

训练VAE模型是优化损失函数的过程,这里我们使用Adam优化器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def loss_function(recon_x, x, mu, logvar):
BCE = F.binary_cross_entropy(recon_x, x.view(-1, 28*28), reduction='sum')
KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
return BCE + KLD

model = VAE()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

model.train()
for epoch in range(10):
for batch_idx, (data, _) in enumerate(train_loader):
data = data.to(torch.device("cpu"))
optimizer.zero_grad()
recon_batch, mu, logvar = model(data)
loss = loss_function(recon_batch, data, mu, logvar)
loss.backward()
optimizer.step()

生成新样本

训练完成后,可以用VAE生成新的手写数字样本:

1
2
3
4
model.eval()
with torch.no_grad():
z = torch.randn(64, 20) # 从潜在空间中采样
sample = model.decode(z).cpu()

生成的样本可以通过Matplotlib可视化:

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt

sample = sample.view(-1, 28, 28)

def show_samples(samples):
fig, axes = plt.subplots(8, 8, figsize=(10, 10))
for i, ax in enumerate(axes.flat):
ax.imshow(samples[i].numpy(), cmap='gray')
ax.axis('off')
plt.show()

show_samples(sample)

小结

在本篇教程中,我们详细介绍了变分自编码器(VAE)的基本概念、工作原理及实现方法。通过手写数字生成的案例,我们发现VAE不仅

分享转发

8 文本生成模型

在上一篇中,我们探讨了生成式AI的基础概念,以及变分自编码器(VAE)的基本原理和应用。在本篇教程中,我们将聚焦于一种重要的生成模型——文本生成模型。文本生成技术在自然语言处理(NLP)领域得到了广泛应用,从自动写作、对话生成到代码生成等,都展现了生成式AI的强大能力。

1. 文本生成模型概述

文本生成模型旨在自动生成连贯且有意义的文本。与VAE强调的图像生成不同,文本生成模型通常需要处理更复杂的语言结构和上下文关系。常见的文本生成模型包括:

  • 循环神经网络(RNN)
  • 长短时记忆网络(LSTM)
  • 门控循环单元(GRU)
  • Transformer模型

在本篇中,我们将重点讨论以Transformer为基础的文本生成模型,因为它们在效果和应用广度上都超越了传统的RNN和LSTM。

2. Transformer架构

Transformer架构由Google在2017年提出,具有以下优点:

  • 并行处理:与RNN不同,Transformer可以同时处理输入序列的所有位置。
  • 长距离依赖:借助自注意力机制,Transformer能够捕捉长距离的依赖关系。

2.1 自注意力机制

自注意力机制(Self-Attention)是Transformer的核心组件,它允许模型在处理当前输入时,同时考虑到其他位置的信息。具体来说,对于输入序列中的每个单词,通过以下公式可以计算其注意力表示:

$$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)V
$$

其中,$Q$、$K$和$V$分别是查询、键和值的矩阵表示,而$d_k$是键向量的维度。

2.2 Transformer Encoder-Decoder结构

Transformer模型通常由两个部分组成:

  • Encoder:负责编码输入序列。
  • Decoder:负责生成输出序列。

Encoder的每一层都有两个主要子层——多头自注意力机制和前馈神经网络。Decoder则在此基础上,增加了对Encoder输出的关注。

3. 文本生成的训练

文本生成模型的训练通常需要大量的标注文本数据。在训练过程中,模型会学习如何根据给定的上下文生成新的单词或句子。

3.1 训练目标

常用的训练目标是最小化交叉熵损失。对于一系列的单词序列,目标是预测下一个单词:

$$
\mathcal{L} = -\sum_{t=1}^{T} \log P(w_t | w_{1}, w_{2}, \ldots, w_{t-1})
$$

这里,$w_t$代表第$t$个单词,$T$是序列长度。

3.2 实际训练案例

以下是一个使用Hugging Face Transformers库的简单示例,演示如何训练一个文本生成模型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from transformers import GPT2Tokenizer, GPT2LMHeadModel
import torch

# 初始化tokenizer和模型
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

# 准备训练数据
text = "你好,世界!今天的天气非常好。"
inputs = tokenizer.encode(text, return_tensors='pt')

# 训练模型
model.train()
outputs = model(inputs, labels=inputs)
loss = outputs.loss
loss.backward()

# 更新参数(需要设置优化器,这里只是演示)
print(f'Training loss: {loss.item()}')

4. 文本生成的应用

文本生成模型在许多应用场景中表现出了巨大的潜力:

  • 自动写作:例如,使用文本生成模型撰写文章或诗歌。
  • 对话系统:创建能与用户进行自然对话的聊天机器人。
  • 内容补全:在用户输入的基础上,自动生成其余部分。

5. 总结

本节介绍了文本生成模型的基本概念和训练方法,从Transformer架构到实际的代码示例,为您展示了生成式AI在文本生成中的应用。下一篇我们将继续深入探讨生成式AI的另一重要领域——图像生成模型。因此,理解文本生成的每个细节将为您在图像生成的学习打下良好的基础。

分享转发

9 生成模型类型之图像生成模型

在我们之前的讨论中,我们探讨了生成模型中的文本生成模型,了解了如何使用自然语言生成器创作优美的文字。接下来,我们将目光转向生成模型的另一个重要分支——图像生成模型。图像生成模型的目的在于利用计算机算法生成新的图像,这些图像可以是完全虚构的,或者可以在现有图像的基础上进行调整和优化。

图像生成模型的种类

图像生成模型主要分为以下几类:

  1. 生成对抗网络(GANs)
  2. 变分自编码器(VAEs)
  3. 自回归模型
  4. 扩散模型

接下来,我们将详细介绍每种模型,并通过示例来理解它们是如何工作的。

1. 生成对抗网络(GANs)

生成对抗网络由两部分组成:生成器和判别器。生成器负责生成逼真的图像,而判别器则评估图像的真实性。二者相互对抗,直到生成器能够生成几乎无法被判别器区分的图像。

案例:使用GAN生成图像

下面是一个基于Python和TensorFlow的简单GAN实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import tensorflow as tf
from tensorflow.keras import layers

# 生成器模型
def build_generator():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(100,)))
model.add(layers.Dense(784, activation='sigmoid'))
return model

# 判别器模型
def build_discriminator():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(784,)))
model.add(layers.Dense(1, activation='sigmoid'))
return model

# 创建GAN
generator = build_generator()
discriminator = build_discriminator()

# 整合生成对抗网络
discriminator.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
discriminator.trainable = False # 训练期间不更新判别器
gan_input = layers.Input(shape=(100,))
generated_image = generator(gan_input)
gan_output = discriminator(generated_image)
gan = tf.keras.Model(gan_input, gan_output)
gan.compile(optimizer='adam', loss='binary_crossentropy')

2. 变分自编码器(VAEs)

变分自编码器是一种生成模型,旨在学习数据的潜在表示。VAE通过编码器将输入数据压缩为潜在空间,再通过解码器将其重构,从而生成新图像。

案例:使用VAE生成图像

以下是一个简单的VAE实现例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from tensorflow.keras import layers, models

# 编码器模型
def build_encoder():
input_img = layers.Input(shape=(784,))
x = layers.Dense(128, activation='relu')(input_img)
z_mean = layers.Dense(2)(x)
z_log_var = layers.Dense(2)(x)
return models.Model(input_img, [z_mean, z_log_var])

# 解码器模型
def build_decoder():
latent_inputs = layers.Input(shape=(2,))
x = layers.Dense(128, activation='relu')(latent_inputs)
output_img = layers.Dense(784, activation='sigmoid')(x)
return models.Model(latent_inputs, output_img)

encoder = build_encoder()
decoder = build_decoder()

# 组合VAE
input_img = layers.Input(shape=(784,))
z_mean, z_log_var = encoder(input_img)
z = layers.Lambda(sampling)([z_mean, z_log_var])
reconstructed_img = decoder(z)
vae = models.Model(input_img, reconstructed_img)

3. 自回归模型

自回归模型通过条件概率生成图像的每一个像素。PixelCNN和PixelSNAIL是流行的自回归网络示例。

案例:使用PixelCNN生成图像

1
2
3
4
# 假设已经实现了PixelCNN类
pixel_cnn = PixelCNN()
pixel_cnn.train(training_data)
generated_image = pixel_cnn.generate()

4. 扩散模型

扩散模型是一种较新的生成方法,首先通过向数据逐渐添加噪声,然后通过训练模型来去除这些噪声。这类模型在图像生成中表现出色。

案例:使用扩散模型生成图像

对于扩散模型,我们可能需要借助于一些开源实现,如OpenAI的Diffusion模型。这一模型的训练过程通常涉及到复杂的步骤,但可以通过已有的框架实现非常吸引人的效果。

1
2
3
4
5
# 使用Diffusion库
from diffusion_library import DiffusionModel
model = DiffusionModel()
model.train(training_data)
generated_image = model.generate()

小结

在本篇中,我们演示了几种主要的图像生成模型,包括GAN、VAE、自回归模型和扩散模型。每一种模型都有其特点和应用场景。无论是《“生成对抗网络(GANs)”》的对抗学习,还是《“扩散模型”》的噪声去除,生成模型的发展为我们提供了更加丰富的创造工具。

下一篇文章我们将关注生成模型的音频生成模型,探索如何通过先进的模型合成音频内容,欢迎继续关注!

分享转发

10 生成式AI音频生成模型入门指南

在我们前面的篇章中,我们探讨了生成式AI在图像生成领域的应用与技术底层原理,这次我们将深入了解另一个重要的生成模型类型:音频生成模型。与此同时,我们会保持与上一篇文章的连贯性,为后续的“数据准备与清洗”篇章奠定基础。

什么是音频生成模型?

音频生成模型是能够从随机噪声中生成高质量音频的深度学习模型。这些模型在合成音乐、语音生成以及声效创建等领域发挥了重要作用。关键在于,音频生成不仅仅是简单地重复已有的样本,而是通过模型学习深层次的音频特征,创造出全新的声音。

常见的音频生成模型类型

音频生成模型大致可以分为以下几种类型:

  1. 波形生成模型:直接生成音频波形数据。常用的模型包括 WaveNet 和 SampleRNN。
  2. 谱图生成模型:先生成音频的频谱图,再进行反变换。模型如 Tacotron 和 WaveRNN。
  3. 音乐生成模型:专注于创作音乐,包括Melody RNN 和 OpenAI 的 MuseNet。

为了更好地理解这些模型的工作原理,我们可以通过一个WaveNet的实例来说明。

WaveNet模型的工作原理

WaveNet 是一个由深度学习团队开发的生成模型,通过卷积神经网络(CNN)直接生成音频波形。

结构概述

WaveNet 的基本架构包括:

  • 因果卷积:确保模型在生成音频时只利用前面的信息。
  • 残差连接:有效缓解深层网络的梯度消失问题。
  • 门控机制:动态地控制信息流。

代码示例

以下是一个简单的WaveNet生成音频的Python代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import torch
import torch.nn as nn

class WaveNet(nn.Module):
def __init__(self):
super(WaveNet, self).__init__()
self.conv1 = nn.Conv1d(in_channels=1, out_channels=128, kernel_size=2)
self.conv2 = nn.Conv1d(in_channels=128, out_channels=1, kernel_size=1)
self.activation = nn.ReLU()

def forward(self, x):
x = self.activation(self.conv1(x))
x = self.conv2(x)
return x

model = WaveNet()
input_signal = torch.randn(1, 1, 16000) # 输入音频信号
output = model(input_signal)

在这个示例中,我们定义了一个基本的 WaveNet 模型,包含两个卷积层。需要注意的是,真正的WaveNet模型比这个示例复杂得多。

实际应用案例

语音合成

音频生成模型在语音合成中得到了广泛应用。例如,Google的语音助手采用了WaveNet技术来生成更加自然的语音,使得合成的声音更具情感表现力。

音乐创作

音乐生成也越来越受欢迎。OpenAI 的 MuseNet能够创作风格多样的音乐,并在短时间内生成全新的乐曲。它的成功展示了生成式AI在艺术领域的潜力。

接下来,我们将要注意的一个重要方面是如何准备和清洗用于训练生成音频模型的数据。这一环节是训练模型成功的基础,确保模型能够学习到有用的信息。

小结

在本节中,我们探讨了音频生成模型的基本概念及其主要类型,着重介绍了WaveNet模型的结构,给出了简单的代码示例,并展示了其在语音合成和音乐创作中的实际应用。希望这些基础知识能够为后续的“数据准备与清洗”篇章做好铺垫,让我们在训练生成式AI时游刃有余。

分享转发

11 生成式AI从零教程

在之前的篇章中,我们探讨了生成模型类型,尤其是音频生成模型的特点与应用。在这一章,我们将专注于生成式AI模型训练前的基础工作——数据准备与清洗。只有经过精心准备和清洗的数据,才能让生成模型学到更全面和准确的特征,从而产生高质量的输出。

数据准备

1. 定义目标

在开始数据准备之前,首要任务是明确你的生成模型要解决的问题。例如,如果你的目标是生成音乐,则你需要音乐数据集;而如果你在做文本生成,则需要相应的文本数据。这一步至关重要,因为它将影响后续数据的选择和处理。

2. 数据收集

数据收集是生成式AI的基础。在本章,我们以文本生成和音频生成为例,讨论不同数据源的获取。

文本数据

文本数据可以通过以下方式收集:

  • 网络爬虫: 使用爬虫工具(如Scrapy或BeautifulSoup)从互联网上抓取公开文本。
  • 开放数据集: 利用已有的开放数据集(如Kaggle、UCI Machine Learning Repository)进行下载。

示例代码:

1
2
3
4
5
6
7
import requests

url = 'http://example.com/data.txt'
response = requests.get(url)

with open('data.txt', 'w', encoding='utf-8') as file:
file.write(response.text)

音频数据

对于音频数据,同样可以采取以下途径:

  • 音频库: 使用音频数据集(如LibriSpeech、Common Voice)下载。
  • 录制工具: 自行采集音频,通过麦克风录制。

数据清洗

数据清洗是提升生成模型性能的另一重要步骤。接下来的步骤将帮助你确保数据的质量。

1. 去除噪声

无论是文本还是音频数据,噪声都是不可忽视的。文本中的拼写错误、HTML标签等,都需要过滤掉;音频中的背景噪音、静音片段也要去除。

文本清洗示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import re

def clean_text(text):
# 删除HTML标签
clean = re.compile('<.*?>')
text = re.sub(clean, '', text)

# 删除特殊字符
text = re.sub(r'[^A-Za-z0-9\s]', '', text)

return text

with open('data.txt', 'r', encoding='utf-8') as file:
raw_text = file.read()

cleaned_text = clean_text(raw_text)

音频清理示例

使用音频处理库(如Librosa)来去除噪声:

1
2
3
4
5
6
7
8
9
10
11
import librosa
import soundfile as sf

# 加载音频文件
audio_data, sr = librosa.load('input.wav')

# 进行去噪处理(示例:简单阈值处理)
audio_data_denoised = librosa.effects.preemphasis(audio_data)

# 保存清理后的音频
sf.write('output_denoised.wav', audio_data_denoised, sr)

2. 统一格式

确保所有数据遵循一致的格式,对于模型训练而言非常关键。例如,文本数据应保持统一的编码格式(如UTF-8),而音频数据则应保持相同的采样率和位深度。

3. 数据分割

在准备数据时,需要将数据集划分为训练集、验证集和测试集。这有助于评估模型的泛化能力。

1
2
3
4
5
6
7
from sklearn.model_selection import train_test_split

# 假设 cleaned_data 是我们清理后的文本数据列表
train_data, tmp_data = train_test_split(cleaned_data, test_size=0.2, random_state=42)
valid_data, test_data = train_test_split(tmp_data, test_size=0.5, random_state=42)

print(f'Train size: {len(train_data)}, Validation size: {len(valid_data)}, Test size: {len(test_data)}')

4. 数据增强

数据增强能有效提升模型的性能。对于文本数据,可以考虑同义词替换、随机删除一些词汇等;对于音频数据,可以通过音量调整、时间伸缩等手段来实现。

小结

通过详细的数据准备与清洗步骤,我们为生成式AI模型的训练打下了坚实的基础。在下一篇中,我们将讨论如何选择和设计合适的模型架构,以最大限度地发挥这些已清洗和准备好的数据的潜力。数据的质量直接影响模型的表现,因此在这一阶段切勿草率。之后形成良好的数据处理流程,将为你的生成项目奠定成功的基石。

分享转发

12 训练生成式AI之模型选择与架构设计

在上一篇文章中,我们详细探讨了训练生成式AI所需的数据准备与清洗工作。有效的数据是模型的基石,而在接下来的章节中,我们将集中于“模型选择与架构设计”,为生成式AI的实现打下坚实的基础。这一部分将指导你如何选择适合的模型架构,确保它能够有效地进行学习和生成。

模型选择

在选择生成式AI模型时,我们需要考虑几个关键点:

  1. 任务类型:首先要明确你的生成任务,例如文本生成、图像生成或音频生成等。每种任务通常对应着不同的模型架构。

  2. 数据特征:数据的类型和特征也会影响模型选择。例如,图像数据通常需要卷积神经网络(CNN),而文本生成则可能使用循环神经网络(RNN)或者变换器(Transformer)。

  3. 计算资源:不同模型的计算复杂度差异很大,选择时需要考虑你的计算资源是否充足。

经典模型示例

我们来看几个经典的生成模型:

  • 生成对抗网络(GAN):在图像生成领域非常流行,最初由Ian Goodfellow提出。GAN通过对抗机制,使得生成器与鉴别器相互优化,从而生成高度真实的图像。

  • 变分自编码器(VAE):VAE是一种无监督学习方法,适合于生成图像和其他连续数据。通过使用一个编码器和解码器架构,VAE能够生成特征更加丰富的样本。

  • 变换器(Transformer):在文本生成中,变换器架构已经取得了很大的成功。例如,GPT和BERT都是基于变换器的模型,特别适合于处理长文本和上下文依赖关系。

架构设计

选择好模型后,下一步是对模型架构进行设计。这包括定义层的类型、数量、每层的参数等。

设计要点

  1. 输入层:根据数据类型设置输入层的维度。例如,对于图像输入,通常是三维的(高度,宽度,深度),而文本输入则是一个序列。

  2. 隐藏层数量与类型:决定使用几层隐藏层。同时,需要选择合适的层类型,例如卷积层、全连接层、循环层或自注意力层等。

  3. 激活函数:通常选择ReLU(Rectified Linear Unit)或者其变种,如Leaky ReLU,特别是在隐藏层中;输出层的激活函数则取决于任务,例如生成图像时可以使用Tanh。

  4. 输出层:根据生成的期望结果设计输出层。例如,如果你在进行图像生成,输出层的神经元数目应与图片的像素总数相等。

案例:设计一个简单的GAN

在图像生成任务中,如果选择了GAN模型,可以参考如下架构设计:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import tensorflow as tf
from tensorflow.keras import layers

# 定义生成器
def build_generator(latent_dim):
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_dim=latent_dim))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(28 * 28 * 1, activation='tanh'))
model.add(layers.Reshape((28, 28, 1)))
return model

# 定义鉴别器
def build_discriminator(img_shape):
model = tf.keras.Sequential()
model.add(layers.Flatten(input_shape=img_shape))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
return model

latent_dim = 100
generator = build_generator(latent_dim)
discriminator = build_discriminator((28, 28, 1))

# 显示模型摘要
generator.summary()
discriminator.summary()

在这个简单的 GAN 架构中,生成器接受一个 latent_dim 维度的随机噪声,并通过多个全连接层生成形状为 28x28 的图像;而鉴别器则用于判别输入图像是真实还是生成的。

结论

本文探讨了生成式AI的模型选择与架构设计,强调了任务类型、数据特征和计算资源在模型选择中的重要性。通过理解不同模型的特性以及合理设计模型架构,我们能有效地提升生成模型的性能和生成效果。在下一篇中,我们将继续深入探讨“训练生成式AI之模型训练与评估”,帮助你完成整个模型开发的阅读旅程。

分享转发