我的编程空间,编程开发者的网络收藏夹
学习永远不晚

AIGC - 生成模型简介

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

AIGC - 生成模型简介

AIGC - 生成模型简介

0. 前言

生成式人工智能 (Generative Artificial Intelligence, GAI) 是一种人工智能方法,旨在通过学习训练数据的分布模型来生成新的、原创的数据。人工智能生成内容 (Artificial Intelligence Generated Content, AIGC) 是生成式人工智能的一个具体应用和实现方式,是指利用人工智能技术生成各种形式的内容,如文字、图像、音频和视频等。本节将介绍生成模型基本概念,首先介绍生成模型的基本概念,然后,构建用于衡量生成模型性能的框架,并介绍一些重要的核心概念。然后,介绍当前主流的生成模型技术及其分类。

1. 生成模型

生成模型 (Generative Model) 是机器学习的一个分支,通过训练模型以生成与给定数据集类似的新数据,换句话说模型通过学习训练数据的分布特征,生成与之类似但又不完全相同的新数据。
假设有一个包含猫图片的数据集,如果在该数据集上训练一个生成模型,以捕捉图像中像素之间的复杂关系。然后,我们可以利用该模型进行采样,生成原始数据集中不存在的逼真(猫)图像,如下图所示。

生成模型训练流程

为了构建生成模型,我们需要一个包含许多我们要生成的实例的数据集,这被称为训练数据 (training data),其中每一个数据点称为一个观测值 (observation)。
每个观测值由许多特征 (features) 组成,对于图像生成问题,特征通常是各个像素的像素值;对于文本生成问题,特征通常是单词或字母组合。我们的目标是构建一个模型,可以生成看起来像是使用与原始数据相同规则创建的新特征集。对于图像生成来说,这是一个非常困难的任务,不仅由于生成的图像需要具有真实世界的特征和细节,包括纹理、颜色、形状等,同时图像生成模型通常需要大量的训练数据来学习图像的特征和分布。
生成模型还必须是概率性的 (probabilistic),而不是确定性的 (deterministic),因为我们希望能够采样出具有不同变化的输出,而不是每次得到相同的输出,对于图像数据而言,生成的图像应该具有不同的风格、角度和变化,而不是仅仅复制训练数据中的图像。如果我们的模型仅仅是一个固定的计算,例如在训练数据集中每个像素的平均值,那么它就不是生成模型,生成模型必须包含一个影响模型生成的随机因素。
换句话说,我们假设存在某种未知的概率分布,其可以解释图像在训练数据集中存在(或不存在)的合理性。生成模型的目标是构建一个尽可能精确地模仿这个分布的模型,然后从中进行采样,生成看起来像是原始训练集中可能包含的新的、独特的样本数据。

2. 生成模型与判别模型的区别

2.1 模型对比

为了了解生成模型及其重要性,首先需要介绍判别模型。假设我们有一个绘画的数据集,其中包含莫奈与一些其他艺术家的画作。通过使用足够的数据,可以训练一个判别模型,以预测给定的画作是否由莫奈绘制。判别模型能够学到画作中的颜色、形状和纹理特征,以便判断画作是否由莫奈所绘制,对于具有莫奈画作特征的绘画,模型会相应地增加其预测权重。下图展示了判别模型的构建过程:

判别

在构建判别模型时,训练数据中的每个观测值都有一个标签 (label)。对于二分类问题,比如上述画作鉴别器,将莫奈的画作标记为 1,非莫奈的画作标记为 0。然后,判别模型学习如何区分这两组画作,并预测新数据样本属于标签 1 的概率,即样本是由莫奈绘制的概率。
而生成模型不需要数据集带有标签,因为生成模型关注的是生成新图像,而非试图预测给定图像的标签。接下来,使用公式正式定义生成模型和判别模型。

  • 判别模型估计 p(y∣x) p(y|x) p(yx),即在给定输入 x x x 的情况下,输出 y y y 的概率。其中 y y y 是标签, x x x 是观测值
  • 生成模型估计 p(x) p(x) p(x),即生成给定输入 x x x 的观测值的概率,而不考虑标签
  • 判别模型关注如何根据观测值来预测标签,而生成模型关注如何根据概率分布来生成观测值
  • 在判别模型中,可以使用逻辑回归、支持向量机等算法来构建模型。而在生成模型中,常使用生成对抗网络 (Generative Adversarial Networks, GAN) 或扩散模型等算法来生成新的观测值

总结而言,判别模型和生成模型是两种不同的机器学习方法。判别模型通过观测值预测标签,而生成模型通过学习数据分布来生成新的观测值。
生成模型估计 p ( x ) p(x) p(x),即生成观测值 x x x 的概率。也就是说,生成模型旨在对观测值 x x x 进行建模,从所学分布中进行采样可以生成新的观测值。

2.2 条件生成模型

也可以构建生成模型来建模条件概率 p ( x ∣ y ) p(x|y) p(xy),即观察到具有特定标签 y y y 的观测值 x x x 的概率。例如,如果数据集包含不同类型的水果,可以训练生成模型仅仅生成苹果图像。
需要注意的,即使我们能够构建一个完美的判别模型识别莫奈的画作,但它仍然无法创作一幅具备莫奈风格的画作,它只是被训练用于输出关于现有图像的类别概率。相反,生成模型被训练用于从该模型中进行采样,以生成具有高概率属于原始训练数据集的图像。

2.3 生成模型的发展

数年来,判别模型一直是推动机器学习发展的主要动力。这是因为相对于判别问题,相应的生成问题通常更难解决。例如,训练一个模型预测一幅画是否是莫奈所作比起训练一个模型来生成莫奈风格的画作要容易得多;同样,训练一个模型来预测一篇小说是否是莎士比亚所写比起构建一个模型来生成一篇莎士比亚风格的小说要容易得多。
近来,随着机器学习技术的发展,解决生成问题变得不再遥不可及。通过将机器学习应用于构建生成模型的新颖应用得到了快速发展。下图展示了图像生成模型在面部图像生成方面的研究进展。

生成模型发展
除了更容易解决的优势之外,判别模型在实际问题中的应用也比生成模型更广泛。例如,能够预测给定视网膜图像是否隐含青光眼迹象的模型对医疗领域具有重要作用,但能够生成眼部图片的模型可能并无作用。
但随着越来越多的公司开始提供面向特定业务问题的生成服务,生成模型的应用范围正在快速扩展。例如,只需提供特定的主题材料,就可以通过 API 访问生成原创博客文章的服务,还可以生成在不同场景下的产品图像,或者编写与品牌和目标信息相匹配的社交媒体内容和广告文案。同时,生成式AI在游戏设计和电影制作等行业也逐渐得到应用。

2.4 生成模型与人工智能

除了生成模型的实际应用,生成模型的发展还有三个更深层次的原因,生成模型是实现更精细人工智能形式的关键,超越了仅靠判别模型所能实现的范围。
首先,从理论角度来看,不应该局限于对数据进行简单分类。为了完整性,还应该关注能够捕捉数据分布更完整(超越特定标签)理解的模型。由于输出空间的维度较高,生成模型的构建无疑是一个更难解决的问题。许多判别模型中的关键技术,如深度学习等,也可以被生成模型所利用。
其次,生成模型现在正被用于推动人工智能的其他领域取得进展,例如强化学习等。假设要训练一个机器人在给定的地形上移动,传统方法是在计算机中模拟运行许多实验,其中智能体尝试使用不同的策略。随着实验的进行,智能体将学会哪些策略更有效,从而逐渐改善性能。这种方法的一个缺点是它的可扩展性较差,因为它是为一个特定任务优化策略。最近流行起来的另一种方法是放弃训练智能体优化特定任务的策略,转而使用生成模型训练智能体学习环境的世界模型,其独立于特定任务。智能体可以通过在自己的世界模型中测试策略来快速适应新任务,而不是在真实环境中进行测试,这种方法通常更高效,并且不需要为每个新任务重新训练。
最后,如果我们真的已经构建了一台具有与人类相媲美智能形式的机器,那么生成模型将是其中必不可少的部分。自然界中最好的生成模型之一就是人类,我们能够想象以任何可能的角度看小猫的样子;可以想象出电视节目几种不同的合理结局。当前神经科学理论表明,我们对现实的感知并不是一个在感官输入上运算的高度复杂的判别模型,用于预测我们经历的事物,而是一个从出生开始便不断训练的生成模型,用于产生准确匹配未来的环境模拟。显然,如何构建具备这种能力的机器对于我们了解解大脑运作和人工智能至关重要。

3. 生成模型示例

3.1 简单示例

首先,我们将使用一个简单示例展示生成模型。在二维空间中,使用 P d a t a P_{data} Pdata 规则生成如下图所示点集,我们的目标是得到二维空间中新的点 x = ( x1 , x2 ) x=(x_1,x_2) x=(x1,x2),使其看起来像是由相同规则生成的。

训练数据集

我们可以根据已有数据点的知识选择一个位置,构建模型 p m o d e l p_{model} pmodel,用于估计该点可能出现的位置。此时, p m o d e l p_{model} pmodel p d a t a p_{data} pdata 的一个估计。 p m o d e l p_{model} pmodel 可能如下图中的矩形框所示,点只可能出现在框内,而框外的区域则可能没有任何点。

点生成模型

为了生成一个新的观测值,可以在框内随机选择一个点,或者说从分布 p m o d e l p_{model} pmodel 中进行采样。这就可以视为一个简单的生成模型,我们利用训练数据(黑色点)构建了一个模型(橙色区域),可以从中进行采样,生成看起来属于训练集的点。

3.2 生成模型框架

我们可以通过以下框架来表达我们构建生成模型的目标:

  • 准备一组观测数据 X X X
  • 假设这些观测数据是根据某一分布 p d a t a p_{data} pdata 生成的
  • 目标是构建生成模型 p m o d e l p_{model} pmodel,以近似 p d a t a p_{data} pdata,如果实现了此目标,就可以从 p m o d e l p_{model} pmodel 中进行采样,生成看起来像是从 p d a t a p_{data} pdata 中抽取的观测数据

因此, p m o d e l p_{model} pmodel 需要包含以下属性:

  • 准确性:如果 p m o d e l p_{model} pmodel 生成的观测样本准确性较高,则观测样本应该看起来像是从 p d a t a p_{data} pdata 中抽取的;如果 p m o d e l p_{model} pmodel 生成的观测样本准确性较低,则观测样本不应该看起来像是从 p d a t a p_{data} pdata 中抽取的
  • 生成性:能够简单地从 p m o d e l p_{model} pmodel 中进行采样生成新的观测样本
  • 表示性:能够理解 p m o d e l p_{model} pmodel 如何表示数据中不同的高级特征

接下来,我们使用简单数据生成分布 p d a t a p_{data} pdata,并利用上述框架进行处理,如下图所示,数据生成规则设定数据样本在蓝色区域均匀分布,且数据样本不能出现在黄色区域。

数据分布

我们使用的模型 p m o d e l p_{model} pmodel (灰色区域)是对真实数据生成分布 p d a t a p_{data} pdata 的简化模型。数据样本 ABC 是模型 p m o d e l p_{model} pmodel 模拟 p d a t a p_{data} pdata 生成的数据:

  • A 是由模型生成的观测样本,但看起来并不像是由 p d a t a p_{data} pdata 生成的,因为它位于黄色区域中
  • B 无法由模型生成,因为它位于灰色区域之外,因此,可以说 B 为模型无法在整个可能性范围内的生成观测样本
  • C 是一个合理的数据样本点,因为它既可以由模型 p m o d e l p_{model} pmodel 生成,也可以由真实分布 p d a t a p_{data} pdata 生成

尽管模型 p m o d e l p_{model} pmodel 存在缺陷,但该模型易于进行抽样,因为它是一个灰色框内的均匀分布,我们可以简单地从该框中随机选择一个点来进行抽样。
此外,生成模型 p m o d e l p_{model} pmodel 是对底层复杂分布的简单表示,但其也捕捉了一些底层高级特征。真实分布被划分为多个蓝色区域和黄色区域,这相当于本例的高级特征,虽然模型 p m o d e l p_{model} pmodel 也捕捉到这一高级特征,但其将其近似为单个蓝色区域。
上述示例演示了生成模型的基本概念,虽然生成模型是一个丰富多彩的领域,且问题的定义与处理也多种多样,但处理生成模型问题时基本遵循上述基本框架。

4. 表示学习

假设我们想向一个不认识的人描述自己的外貌,我们并不会逐个描述自己照片的每个像素。相反,我们会首先合理地假设对方对普通人的外貌有基本的了解,然后通过描述外貌特征,例如黑色的头发、褐色的眼睛等,对方就能够将这个描述映射回照片像素,从而在脑海中生成一个基本图像,虽然这个图像可能并不完美,但足够接近真实外貌,能够用于在数百个人中准确的识别。
据此,表示学习 (Representation Learning) 的核心思想可以描述如下:模型并不会尝试直接对高维样本空间建模,而是使用一些低维潜空间 (Latent Space) 描述训练集中的每个观测样本,然后学习一个映射函数,可以将潜空间中的点映射到原始领域中。换句话说,潜空间中的每个点都是某一高维观测样本的表示 (Representation)。
假设有如下训练集,其中包含了大量圆柱体的灰度图像。

数据集

对于人类而言,很明显可以使用圆柱体的高度和半径这两个特征唯一的表示这些圆柱体。也就是说,我们可以将每个圆柱体的图像转换为两维潜空间中的一个点,即使训练集中的图像是以高维像素空间表示的。这也意味着我们可以通过将适当的映射函数 f 应用于潜空间中的新点来生成不在训练集中的圆柱体图像。
对于机器而言,使用较简单的潜空间来描述原始数据集并非易事,机器首先需要确定高度和半径是最适合描述该数据集的两个潜空间维度,然后学习能够将该空间中的点映射到灰度圆柱体图像的映射函数 f f f。机器学习(尤其是深度学习)能够训练机器在没有人类指导的情况下学习这些高度复杂的映射函数。

生成模型

表示学习能够以更易管理、且能够影响图像高级属性的隐空间中进行操作。例如,通过调整每个像素来增加圆柱体图像的高度并非易事,但在潜空间中,只需要增加高度对应的潜维度,然后应用映射函数即可反映到图像域上。
表示学习能够学习用于描述给定观测样本最为重要的特征,以及如何根据原始数据生成这些特征。将训练数据集编码为潜空间,以便可以从中进行采样,并将采样点解码回原始域,是许多生成模型构建的基础。从数学角度来说,表示学习试图将数据所处的高度非线性流形 (nonlinear manifold) (例如,像素空间)转化为更简单的潜空间,以便可以从中进行采样,从概率上而言,潜空间中的任何一点都能作为一个图像的表示。通过调整隐空间中的特征值,就可以生成新的表示,然后将其映射回原始数据域(例如图像)时,就可以得到逼真数据样本(例如图像数据)。

表示学习

5. 生成模型与概率论

生成模型与概率分布的统计建模密切相关,因此,需要了解一些核心统计概念,用于解释每个生成模型的理论背景。为了充分理解要解决的任务,需要建立对基本概率理论的扎实理解,以理解不同类型的生成模型。

样本空间
样本空间 (sample space) 是观测样本 x \textbf x x 可以获取的所有值的完整集合。例如,在上述数据分布示例中,样本空间图像中的横纵坐标 ( x , y ) (x, y) (x,y) 组成。例如, x = ( 40 , 10 ) \textbf x=(40,10) x=(40,10) 是样本空间中属于真实数据生成分布的一个点。

概率密度函数
概率密度函数( probability density function,或简称密度函数)是一种将样本空间中的点 x \textbf x x 映射到 01 之间的数值的函数 p ( x ) p(\textbf x) p(x)。密度函数在样本空间中所有点上的积分必须等于 1,以确保其是一个明确定义的概率分布。
在上述数据分布示例中,生成模型的密度函数在灰色框之外为 0,在灰色框内为常数,因此密度函数在整个样本空间上的积分等于 1
虽然只有一个真实的密度函数 p d a t a ( x ) p_{data}(\textbf x) pdata(x) 能够真正生成可观测数据集,但有无限多个密度函数 p m o d e l ( x ) p_{model}(\textbf x) pmodel(x) 可以用来估计 p d a t a ( x ) p_{data}(\textbf x) pdata(x)。为了能够找出合适的 p m o d e l ( x ) p_{model}(\textbf x) pmodel(x),可以使用参数化建模 (parametric modeling) 技术。

参数化建模
参数化建模 (parametric modeling) 是一种用来寻找合适 p m o d e l ( x ) p_{model}(\textbf x) pmodel(x) 的方法。参数模型 pθ ( x ) p_θ(\textbf x) pθ(x) 是一系列密度函数,可以通过有限数量的参数 θ θ θ 来描述。
如果我们将均匀分布假设为模型簇,那么在上述数据分布示例中,我们可以绘制的所有可能框的集合就是参数化模型的一个例子。在这种情况下,我们需要四个参数:方框的左下角 ( θ1 , θ2 ) (θ_1, θ_2) (θ1,θ2) 和右上角 ( θ3 , θ4 ) (θ_3, θ_4) (θ3,θ4) 的坐标。
因此,该参数模型中的每个密度函数 pθ ( x ) p_θ(\textbf x) pθ(x) (即每个方框)可以由四个数字 θ = ( θ1 , θ2 , θ3 , θ4 ) θ=(θ_1, θ_2, θ_3, θ_4) θ=(θ1,θ2,θ3,θ4) 唯一的表示。

似然函数
给定某个观测样本 x \textbf x x,参数集 θ θ θ 的似然函数 L ( θ ∣ x ) L(θ|\textbf x) L(θx) 是一个量度 θ θ θ 在给定观测点 x \textbf x x 处的合理性的函数,其定义如下:

L(θ∣x)= p θ (x) \mathscr{L}(θ|\textbf x) = p_θ(\textbf x) L(θx)=pθ(x)

也就是说,给定某个观测样本 x \textbf x x θ θ θ 的似然性表示用参数 θ θ θ 表示点 x \textbf x x 上的密度函数值,如果我们有一个完整的独立观测数据集 X \textbf X X,则可以写成:

L(θ∣X)= Π x ∈ X p θ (x) \mathscr L(θ|\textbf X) = \underset {\textbf x \in \textbf X} {\Pi}p_θ(\textbf x) L(θX)=xXΠpθ(x)

由于计算 01 之间大量项的乘积可能非常困难,因此通常使用对数似然度ℓ代替:

ℓ(θ∣x)= ∑ x ∈ X log p θ (x) \ell (θ|\textbf x) = \sum_{\textbf x\in \textbf X} log p_θ(\textbf x) (θx)=xXlogpθ(x)

在上述数据分布示例中,只覆盖图像左半部分的灰色框的似然性为 0,因为我们观察到的数据点位于图像右半部分,因此该框不可能生成数据集。图像中的灰色框的似然性为正数,因为在该模型下所有数据点的密度函数都是正数。
似然函数的此种定义方式是具有统计意义的,但我们也可以直观地理解这个定义。我们可以简单的将参数集 θ θ θ 的似然函数定义为:在由参数集 θ θ θ 定义的模型中,观测到数据的概率。
需要注意的是,似然函数是参数的函数,而不是数据的函数。不应将其解释为给定参数集正确的概率,换句话说,它不是参数空间上的概率分布(即在参数方面不会求和/积分为1)。
直观而言,参数化建模应该专注于找到最优的参数 θ^ \hat θ θ^,以最大化数据集 X \textbf X X 观测值的似然性。

最大似然估计
最大似然估计 (maximum likelihood estimation) 是一种估计密度函数 pθ ( x ) p_θ(\textbf x) pθ(x) 的参数集 θ^ \hat θ θ^ 的方法,该参数集能够最合理的解释观测数据集 X \textbf X X,更正式的定义如下:

θ ^ = a r g m a x θ L(θ∣X) \hat θ = \underset {θ} {argmax}\mathscr L(θ|\textbf X) θ^=θargmaxL(θX)

θ^ \hat θ θ^ 也被称为最大似然估计 (maximum likelihood estimate, MLE)。在上述数据分布示例中,MLE 是包含训练集中所有点的最小矩形。
神经网络通常需要最小化损失函数,等价的,我们可以找到使负对数似然最小化的参数集:

θ ^ = a r g m i n θ −L(θ∣X)= a r g m i n θ −log p θ (x) \hat θ = \underset {θ} {argmin} -\mathscr L(θ|\textbf X) = \underset {θ} {argmin} -log p_θ(\textbf x) θ^=θargminL(θX)=θargminlogpθ(x)

生成模型可以视为最大似然估计的一种形式,其中参数 θ θ θ 是模型中包含的神经网络的权重。我们试图找到这些参数的值,以最大化观察到的数据的似然性(或等价地,最小化负对数似然)。
然而,在高维问题中,直接计算 pθ ( x ) p_θ(\textbf x) pθ(x) 通常是不可能的,因为它过于复杂的,不同类型的生成模型采用不同的方法来解决这一问题。

6. 生成模型分类

尽管所有类型的生成模型最终都旨在解决同一任务,但它们在对密度函数 pθ ( x ) p_θ(\textbf x) pθ(x) 进行建模时采取了不同的方法。广义上说,有以下三种方法:

  • 显式地对密度函数进行建模,但通过一定方式对模型进行约束,使密度函数可计算
  • 显式地对密度函数的可计算近似进行建模
  • 通过直接生成数据的随机过程来隐式地对密度函数进行建模

生成模型分类方式如下所示,这些模型簇并不是互斥的,有很多模型混合使用了两种及以上的不同方法。

在这里插入图片描述

我们可以首先将模型分为显式建模概率密度函数 p ( x ) p(\textbf x) p(x) 的模型和隐式建模概率密度函数的模型。
隐式密度模型并不直接估计概率密度,而专注于直接生成数据的随机过程。生成对抗网络 (Generative Adversarial Networks, GAN) 是典型的隐式生成模型。显式密度模型可以进一步分为直接优化密度函数(可计算密度模型)和优化其近似值的模型。
可计算密度模型通过对模型架构进行约束,使得密度函数具有易于计算的形式。例如,自回归模型对输入特征进行排序,以便可以按序生成输出,比如逐字生成或逐像素生成。正则流模型将一系列可计算的可逆函数应用于简单分布,以生成更复杂的分布。
近似密度模型包括变分自编码器,引入潜变量并优化联合密度函数的近似值。能量模型也利用近似方法,但是其通过马尔可夫链采样而非变分方法。扩散模型通过训练模型逐渐去噪给定图像来近似密度函数。

小结

本节介绍了人工智能的一个重要分支——生成模型,介绍了生成模型理论和应用的最新进展。我们从一个简单的示例开始,了解了生成模型最终关注的是对数据的潜在分布进行建模。通过总结生成模型框架,以理解生成模型的重要属性。然后,介绍了有助于理解生成模型的理论基础和关键概率概念,并概述了生成模型的分类方法。

来源地址:https://blog.csdn.net/LOVEmy134611/article/details/132463580

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

AIGC - 生成模型简介

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django之模型---ORM简介

ORM,是“对象-关系-映射”的简称,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。创建项目,在mode
2023-01-30

ASP.NET页面对象模型简介

本篇内容主要讲解“ASP.NET页面对象模型简介”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET页面对象模型简介”吧!ASP.NET页面对象模型简介Microsoft Interne
2023-06-18

ADO对象模型的简单介绍

本篇内容介绍了“ADO对象模型的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ADO对象模型是ActiveX Data Object
2023-06-17

简介Python的collections模块中defaultdict类型的用法

defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,unique 的数据,而 value 可以是任意的数据类型。如果 value 是 list,dict 等
2022-06-04

ADO.NET Framework模型生成数据怎么实现

本篇内容介绍了“ADO.NET Framework模型生成数据怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过这些DataAdap
2023-06-17

Django | 模型类变更后生成迁移文

报错:You are trying to add a non-nullable field 'BookName' to BookInfo without a default; we can't do that (the database n
2023-01-30

JPA元模型怎么利用Eclipse进行生成

这期内容当中小编将会给大家带来有关JPA元模型怎么利用Eclipse进行生成,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、右击项目,选择“属性”,打开项目属性窗口。2、选择:java编译器 -- 注释
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录