本人仅以 PaddlePaddle 深度学习 101 官网教程为指导,添加个人理解和笔记,仅作为学习练习使用,若有错误,还望批评指教。–ZJ

原文地址: PaddlePaddle 官网| PaddlePaddle 深度学习 101

环境:
- Python 2.7
- Ubuntu 16.04


词向量

本教程源代码目录在book/word2vec, 初次使用请参考PaddlePaddle安装教程,更多内容请参考本教程的视频课堂。

背景介绍

本章我们介绍词的向量表征,也称为 word embedding

  • 词向量是自然语言处理中常见的一个操作,是搜索引擎、广告系统、推荐系统等互联网服务背后常见的基础技术

在这些互联网服务里,我们经常要比较两个词或者两段文本之间的相关性。为了做这样的比较,我们往往先要把词表示成计算机适合处理的方式。

  • 最自然的方式恐怕莫过于向量空间模型(vector space model)。
  • 在这种方式里,每个词被表示成一个实数向量(one-hot vector),其长度为字典大小,每个维度对应一个字典里的每个词,除了这个词对应维度上的值是 1,其他元素都是 0。

One-hot vector虽然自然,但是用处有限。

比如,在互联网广告系统里,如果用户输入的 query 是“母亲节”,而有一个广告的关键词是“康乃馨”。
虽然按照常理,我们知道这两个词之间是有联系的——母亲节通常应该送给母亲一束康乃馨;
但是这两个词对应的one-hot vectors之间的距离度量,无论是欧氏距离还是余弦相似度(cosine similarity),由于其向量正交,都认为这两个词毫无相关性。

  • 得出这种与我们相悖的结论的根本原因是:每个词本身的信息量都太小。所以,仅仅给定两个词,不足以让我们准确判别它们是否相关。要想精确计算相关性,我们还需要更多的信息——从大量数据里通过机器学习方法归纳出来的知识。

在机器学习领域里,各种“知识”被各种模型表示,词向量模型(word embedding model) 就是其中的一类。通过词向量模型可将一个 one-hot vector 映射到一个维度更低的实数向量(embedding vector),

embedding()=[0.3,4.2,1.5,...],embedding()=[0.2,5.6,2.3,...] e m b e d d i n g ( 母 亲 节 ) = [ 0.3 , 4.2 , − 1.5 , . . . ] , e m b e d d i n g ( 康 乃 馨 ) = [ 0.2 , 5.6 , − 2.3 , . . . ]

在这个映射到的实数向量表示中,希望两个语义(或用法)上相似的词对应的词向量“更像”,这样如“母亲节”和“康乃馨”的对应词向量的余弦相似度就不再为零了。

词向量模型可以是概率模型、共生矩阵 (co-occurrence matrix) 模型或神经元网络模型。

在用神经网络求词向量之前,传统做法是统计一个词语的共生矩阵 X X
X
X


是一个 |V|×|V| | V | × | V |
大小的矩阵, Xij X i j
表示在所有语料中,词汇表V(vocabulary)中第 i 个词和第 j 个词同时出现的词数, |V| | V |
为词汇表的大小。对 X X
做矩阵分解(如奇异值分解,Singular Value Decomposition [5]),得到的 U
U


即视为所有词的词向量:

X=USVT X = U S V T

但这样的传统做法有很多问题:

1) 由于很多词没有出现,导致矩阵极其稀疏,因此需要对词频做额外处理来达到好的矩阵分解效果;

2) 矩阵非常大,维度太高(通常达到 106106 10 6 ∗ 10 6
的数量级);

3) 需要手动去掉停用词(如 although, a,…),不然这些频繁出现的词也会影响矩阵分解的效果。

基于神经网络的模型不需要计算存储一个在全语料上统计的大表,而是通过学习语义信息得到词向量,因此能很好地解决以上问题。在本章里,我们将展示基于神经网络训练词向量的细节,以及如何用 PaddlePaddle 训练一个词向量模型。

效果展示

本章中,当词向量训练好后,我们可以用数据可视化算法 t-SNE[4]画出词语特征在二维上的投影(如下图所示)。从图中可以看出,语义相关的词语(如a, the, these; big, huge)在投影上距离很近,语意无关的词(如 say, business; decision, japan)在投影上的距离很远。



图1. 词向量的二维投影

另一方面,我们知道两个向量的余弦值在 [1,1] [ − 1 , 1 ]
的区间内:

  • 两个完全相同的向量余弦值为 1,
  • 两个相互垂直的向量之间余弦值为 0,
  • 两个方向完全相反的向量余弦值为 -1,
  • 即相关性和余弦值大小成正比。因此我们还可以计算两个词向量的余弦相似度:
similarity: 0.899180685161
please input two words: big hugeplease input two words: from company
similarity: -0.0997506977351

以上结果可以通过运行`calculate_dis.py`, 加载字典里的单词和对应训练特征结果得到,我们将在[应用模型](#应用模型)中详细描述用法。 ## 模型概览 在这里我们介绍三个训练词向量的模型:N-gram 模型,CBOW 模型和 Skip-gram 模型,它们的中心思想都是通过上下文得到一个词出现的概率。对于 N-gram 模型,我们会先介绍语言模型的概念,并在之后的[训练模型](#训练模型)中,带大家用 PaddlePaddle 实现它。而后两个模型,是近年来最有名的神经元词向量模型,由 Tomas Mikolov 在 Google 研发

[3](#参考文献) [3](#参考文献)

,虽然它们很浅很简单,但训练效果很好。 ### 语言模型 在介绍词向量模型之前,我们先来引入一个概念:**语言模型。** 语言模型旨在为语句的联合概率函数 P(w1,...,wT) P ( w 1 , . . . , w T )
建模, 其中 wi w i
表示句子中的第 i个词。语言模型的目标是,希望模型对有意义的句子赋予大概率,对没意义的句子赋予小概率。 这样的模型可以应用于很多领域,如机器翻译、语音识别、信息检索、词性标注、手写识别等,它们都希望能得到一个连续序列的概率。 以信息检索为例,当你在搜索 “how long is a football bame” 时( bame 是一个医学名词),搜索引擎会提示你是否希望搜索 “how long is a football game”, 这是因为根据语言模型计算出“how long is a football bame”的概率很低,而与 bame 近似的,可能引起错误的词中,game 会使该句生成的概率最大。 对语言模型的目标概率 P(w1,...,wT) P ( w 1 , . . . , w T )
,如果假设文本中每个词都是相互独立的,则整句话的联合概率可以表示为其中所有词语条件概率的乘积,即:

P(w1,...,wT)=t=1TP(wt) P ( w 1 , . . . , w T ) = ∏ t = 1 T P ( w t )

然而我们知道语句中的每个词出现的概率都与其前面的词紧密相关, 所以实际上通常用条件概率表示语言模型:

P(w1,...,wT)=t=1TP(wt|w1,...,wt1) P ( w 1 , . . . , w T ) = ∏ t = 1 T P ( w t | w 1 , . . . , w t − 1 )

### N-gram neural model 在计算语言学中,n-gram 是一种重要的文本表示方法,表示一个文本中连续的 n 个项。基于具体的应用场景,每一项可以是一个字母、单词或者音节。 n-gram 模型也是统计语言模型中的一种重要方法,用 n-gram 训练语言模型时,一般用每个 n-gram 的历史 n-1 个词语组成的内容来预测第 n 个词。 Yoshua Bengio 等科学家就于 2003 年在著名论文 Neural Probabilistic Language Models

[1](#参考文献) [1](#参考文献)

中介绍如何学习一个神经元网络表示的词向量模型。 - 文中的神经概率语言模型(Neural Network Language Model,NNLM)通过一个线性映射和一个非线性隐层连接,同时学习了语言模型和词向量,即通过学习大量语料得到词语的向量表达,通过这些向量得到整个句子的概率。 - 用这种方法学习语言模型可以克服维度灾难(curse of dimensionality),即训练和测试数据不同导致的模型不准。注意:由于“神经概率语言模型”说法较为泛泛,我们在这里不用其 NNLM 的本名,考虑到其具体做法,本文中称该模型为 N-gram neural model。 我们在上文中已经讲到用条件概率建模语言模型,即一句话中第 t t
个词的概率和该句话的前 t1
t





1


个词相关。可实际上越远的词语其实对该词的影响越小,那么如果考虑一个 n-gram, 每个词都只受其前面`n-1`个词的影响,则有:

P(w1,...,wT)=t=nTP(wt|wt1,wt2,...,wtn+1) P ( w 1 , . . . , w T ) = ∏ t = n T P ( w t | w t − 1 , w t − 2 , . . . , w t − n + 1 )

给定一些真实语料,这些语料中都是有意义的句子,N-gram 模型的优化目标则是最大化目标函数:

1Ttf(wt,wt1,...,wtn+1;θ)+R(θ) 1 T ∑ t f ( w t , w t − 1 , . . . , w t − n + 1 ; θ ) + R ( θ )

其中 f(wt,wt1,...,wtn+1) f ( w t , w t − 1 , . . . , w t − n + 1 )
表示根据历史 n-1 个词得到当前词 wt w t
的条件概率, R(θ) R ( θ )
表示参数正则项。

![这里写图片描述](https://img-blog.csdn.net/2018041910154820?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pVTkpVTl9aSEFP/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 图2. N-gram神经网络模型

图2展示了 N-gram 神经网络模型,从下往上看,该模型分为以下几个部分: - 对于每个样本,模型输入 wtn+1,...wt1 w t − n + 1 , . . . w t − 1
, 输出句子第 t 个词为字典中`|V|`个词的概率。 每个输入词 wtn+1,...wt1 w t − n + 1 , . . . w t − 1
首先通过映射矩阵映射到词向量 C(wtn+1),...C(wt1) C ( w t − n + 1 ) , . . . C ( w t − 1 )
。 - 然后所有词语的词向量连接成一个大向量,并经过一个非线性映射得到历史词语的隐层表示:

g=Utanh(θTx+b1)+Wx+b2 g = U t a n h ( θ T x + b 1 ) + W x + b 2

其中, x x
为所有词语的词向量连接成的大向量,表示文本历史特征;θ
θ


U U
b1

b


1


b2 b 2
W W
分别为词向量层到隐层连接的参数。g
g


表示未经归一化的所有输出单词概率, gi g i
表示未经归一化的字典中第 i i
个单词的输出概率。- 根据 softmax 的定义,通过归一化 gi

g


i


, 生成目标词 wt w t
的概率为:

P(wt|w1,...,wtn+1)=egwt|V|iegi P ( w t | w 1 , . . . , w t − n + 1 ) = e g w t ∑ i | V | e g i

- 整个网络的损失值(cost)为多类分类交叉熵,用公式表示为

J(θ)=i=1Nc=1|V|yiklog(softmax(gik)) J ( θ ) = − ∑ i = 1 N ∑ c = 1 | V | y k i l o g ( s o f t m a x ( g k i ) )

其中 yik y k i
表示第 i i
个样本第 k
k


类的真实标签(0或1), softmax(gik) s o f t m a x ( g k i )
表示第 i 个样本第k类softmax输出的概率。 ### Continuous Bag-of-Words model(CBOW) CBOW 模型通过一个词的上下文(各 N 个词)预测当前词。当 N=2 时,模型如下图所示:

![这里写图片描述](https://img-blog.csdn.net/20180419101614981?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pVTkpVTl9aSEFP/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 图3. CBOW模型

具体来说,不考虑上下文的词语输入顺序,CBOW 是用上下文词语的词向量的均值来预测当前词。即:

context=xt1+xt2+xt+1+xt+24 c o n t e x t = x t − 1 + x t − 2 + x t + 1 + x t + 2 4

其中 xt x t
为第 t t
个词的词向量,分类分数(score)向量 z=Ucontext
z


=


U





c


o


n


t


e


x


t


,最终的分类 y y
采用 softmax,损失函数采用多类分类交叉熵。### Skip-gram modelCBOW 的好处是对上下文词语的分布在词向量上进行了平滑,去掉了噪声,因此在小数据集上很有效。而 Skip-gram 的方法中,用一个词预测其上下文,得到了当前词上下文的很多样本,因此可用于更大的数据集。

![这里写图片描述](https://img-blog.csdn.net/20180419101718542?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pVTkpVTl9aSEFP/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)图4. Skip-gram模型

如上图所示,Skip-gram 模型的具体做法是,将一个词的词向量映射到 2n
2


n


个词的词向量( 2n 2 n
表示当前输入词的前后各 n n
个词),然后分别通过 softmax 得到这 2n
2


n


个词的分类损失值之和。 ## 数据准备 ### 数据介绍 本教程使用 Penn Treebank (PTB)(经 Tomas Mikolov 预处理过的版本)数据集。PTB 数据集较小,训练速度快,应用于 Mikolov 的公开语言模型训练工具

[2](#参考文献) [2](#参考文献)

中。其统计情况如下:

训练数据 验证数据 测试数据
ptb.train.txt ptb.valid.txt ptb.test.txt
42068句 3370句 3761句

数据预处理

本章训练的是 5-gram 模型,表示在 PaddlePaddle 训练时,每条数据的前 4 个词用来预测第 5个词。PaddlePaddle 提供了对应PTB数据集的 python 包paddle.dataset.imikolov,自动做数据的下载与预处理,方便大家使用。

预处理会把数据集中的每一句话前后加上开始符号<s>以及结束符号<e>。然后依据窗口大小(本教程中为 5),从头到尾每次向右滑动窗口并生成一条数据。

如”I have a dream that one day” 一句提供了5条数据:

<s> I have a dream
I have a dream that
have a dream that one
a dream that one day
dream that one day <e>

最后,每个输入会按其单词次在字典里的位置,转化成整数的索引序列,作为 PaddlePaddle 的输入。

编程实现

本配置的模型结构如下图所示:



图5. 模型配置中的N-gram神经网络模型

首先,加载所需要的包:

import math
import paddle.v2 as paddle

然后,定义参数:

embsize = 32 # 词向量维度
hiddensize = 256 # 隐层维度
N = 5 # 训练5-Gram

用于保存和加载word_dict和embedding table的函数

# save and load word dict and embedding table
def save_dict_and_embedding(word_dict, embeddings):with open("word_dict", "w") as f:for key in word_dict:f.write(key + " " + str(word_dict[key]) + "\n")with open("embedding_table", "w") as f:numpy.savetxt(f, embeddings, delimiter=',', newline='\n')def load_dict_and_embedding():word_dict = dict()with open("word_dict", "r") as f:for line in f:key, value = line.strip().split(" ")word_dict[key] = int(value)embeddings = numpy.loadtxt("embedding_table", delimiter=",")return word_dict, embeddings

接着,定义网络结构:

  • wt w t
    之前的 n1 n − 1
    个词 wtn+1,...wt1 w t − n + 1 , . . . w t − 1
    ,通过 |V|×D | V | × D
    的矩阵映射到D维词向量(本例中取D=32)。
def wordemb(inlayer):wordemb = paddle.layer.table_projection(input=inlayer,size=embsize,param_attr=paddle.attr.Param(name="_proj",initial_std=0.001,learning_rate=1,l2_rate=0,sparse_update=True))return wordemb
  • 定义输入层接受的数据类型以及名字。
paddle.init(use_gpu=False, trainer_count=3) # 初始化PaddlePaddle
word_dict = paddle.dataset.imikolov.build_dict()
dict_size = len(word_dict)
# 每个输入层都接受整形数据,这些数据的范围是[0, dict_size)
firstword = paddle.layer.data(name="firstw", type=paddle.data_type.integer_value(dict_size))
secondword = paddle.layer.data(name="secondw", type=paddle.data_type.integer_value(dict_size))
thirdword = paddle.layer.data(name="thirdw", type=paddle.data_type.integer_value(dict_size))
fourthword = paddle.layer.data(name="fourthw", type=paddle.data_type.integer_value(dict_size))
nextword = paddle.layer.data(name="fifthw", type=paddle.data_type.integer_value(dict_size))Efirst = wordemb(firstword)
Esecond = wordemb(secondword)
Ethird = wordemb(thirdword)
Efourth = wordemb(fourthword)
  • 将这n-1个词向量经过concat_layer连接成一个大向量作为历史文本特征。
contextemb = paddle.layer.concat(input=[Efirst, Esecond, Ethird, Efourth])
  • 将历史文本特征经过一个全连接得到文本隐层特征。
hidden1 = paddle.layer.fc(input=contextemb,size=hiddensize,act=paddle.activation.Sigmoid(),layer_attr=paddle.attr.Extra(drop_rate=0.5),bias_attr=paddle.attr.Param(learning_rate=2),param_attr=paddle.attr.Param(initial_std=1. / math.sqrt(embsize * 8),learning_rate=1))
  • 将文本隐层特征,再经过一个全连接,映射成一个 |V| | V |
    维向量,同时通过softmax归一化得到这|V|个词的生成概率。
predictword = paddle.layer.fc(input=hidden1,size=dict_size,bias_attr=paddle.attr.Param(learning_rate=2),act=paddle.activation.Softmax())
  • 网络的损失函数为多分类交叉熵,可直接调用classification_cost函数。
cost = paddle.layer.classification_cost(input=predictword, label=nextword)

然后,指定训练相关的参数:

  • 训练方法(optimizer): 代表训练过程在更新权重时采用动量优化器,本教程使用Adam优化器。
  • 训练速度(learning_rate): 迭代的速度,与网络的训练收敛速度有关系。
  • 正则化(regularization): 是防止网络过拟合的一种手段,此处采用L2正则化。
parameters = paddle.parameters.create(cost)
adagrad = paddle.optimizer.AdaGrad(learning_rate=3e-3,regularization=paddle.optimizer.L2Regularization(8e-4))
trainer = paddle.trainer.SGD(cost, parameters, adagrad)

下一步,我们开始训练过程。paddle.dataset.imikolov.train()paddle.dataset.imikolov.test()分别做训练和测试数据集。这两个函数各自返回一个reader——PaddlePaddle中的reader是一个Python函数,每次调用的时候返回一个Python generator。

paddle.batch的输入是一个reader,输出是一个batched reader —— 在PaddlePaddle里,一个reader每次yield一条训练数据,而一个batched reader每次yield一个minbatch。

def event_handler(event):if isinstance(event, paddle.event.EndIteration):if event.batch_id % 100 == 0:print "Pass %d, Batch %d, Cost %f, %s" % (event.pass_id, event.batch_id, event.cost, event.metrics)if isinstance(event, paddle.event.EndPass):result = trainer.test(paddle.batch(paddle.dataset.imikolov.test(word_dict, N), 32))print "Pass %d, Testing metrics %s" % (event.pass_id, result.metrics)with open("model_%d.tar"%event.pass_id, 'w') as f:trainer.save_parameter_to_tar(f)trainer.train(paddle.batch(paddle.dataset.imikolov.train(word_dict, N), 32),num_passes=100,event_handler=event_handler)
Pass 0, Batch 0, Cost 7.870579, {'classification_error_evaluator': 1.0}, Testing metrics {'classification_error_evaluator': 0.999591588973999}
Pass 0, Batch 100, Cost 6.136420, {'classification_error_evaluator': 0.84375}, Testing metrics {'classification_error_evaluator': 0.8328699469566345}
Pass 0, Batch 200, Cost 5.786797, {'classification_error_evaluator': 0.8125}, Testing metrics {'classification_error_evaluator': 0.8328542709350586}
...

训练过程是完全自动的,event_handler里打印的日志类似如上所示:

经过30个pass,我们将得到平均错误率为classification_error_evaluator=0.735611。

保存词典和embedding

训练完成之后,我们可以把词典和embedding table单独保存下来,后面可以直接使用

# save word dict and embedding table
embeddings = parameters.get("_proj").reshape(len(word_dict), embsize)
save_dict_and_embedding(word_dict, embeddings)

应用模型

训练模型后,我们可以加载模型参数,用训练出来的词向量初始化其他模型,也可以将模型查看参数用来做后续应用。

查看词向量

PaddlePaddle训练出来的参数可以直接使用parameters.get()获取出来。例如查看单词apple的词向量,即为

embeddings = parameters.get("_proj").reshape(len(word_dict), embsize)print embeddings[word_dict['apple']]
[-0.38961065 -0.02392169 -0.00093231  0.36301503  0.13538605  0.16076435
-0.0678709   0.1090285   0.42014077 -0.24119169 -0.31847557  0.204100830.04910378  0.19021918 -0.0122014  -0.04099389 -0.16924137  0.1911236
-0.10917275  0.13068172 -0.23079982  0.42699069 -0.27679482 -0.014729920.2069038   0.09005053 -0.3282454   0.12717034 -0.24218646  0.25304323
0.19072419 -0.24286366]

修改词向量

获得到的embedding为一个标准的numpy矩阵。我们可以对这个numpy矩阵进行修改,然后赋值回去。

def modify_embedding(emb):# Add your modification here.passmodify_embedding(embeddings)
parameters.set("_proj", embeddings)

计算词语之间的余弦距离

两个向量之间的距离可以用余弦值来表示,余弦值在 [1,1] [ − 1 , 1 ]
的区间内,向量间余弦值越大,其距离越近。这里我们在calculate_dis.py中实现不同词语的距离度量。
用法如下:

from scipy import spatialemb_1 = embeddings[word_dict['world']]
emb_2 = embeddings[word_dict['would']]print spatial.distance.cosine(emb_1, emb_2)
0.99375076448

总结

  • 本章中,我们介绍了词向量、语言模型和词向量的关系、以及如何通过训练神经网络模型获得词向量。
  • 在信息检索中,我们可以根据向量间的余弦夹角,来判断 query 和文档关键词这二者间的相关性。
  • 在句法分析和语义分析中,训练好的词向量可以用来初始化模型,以得到更好的效果。
  • 在文档分类中,有了词向量之后,可以用聚类的方法将文档中同义词进行分组。希望大家在本章后能够自行运用词向量进行相关领域的研究。

参考文献

  1. Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model[J]. journal of machine learning research, 2003, 3(Feb): 1137-1155.
  2. Mikolov T, Kombrink S, Deoras A, et al. Rnnlm-recurrent neural network language modeling toolkit[C]//Proc. of the 2011 ASRU Workshop. 2011: 196-201.
  3. Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.
  4. Maaten L, Hinton G. Visualizing data using t-SNE[J]. Journal of Machine Learning Research, 2008, 9(Nov): 2579-2605.
  5. https://en.wikipedia.org/wiki/Singular_value_decomposition

知识共享许可协议
本教程 由 PaddlePaddle 创作,采用 知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。

PaddlePaddle | 深度学习 101- 词向量相关推荐

  1. 深度学习之词向量Word Embedding总结

    目录 一.Word Embedding介绍 二.One-Hot 表示 三.Distributed 表示 四.word2vec表示 五.BERT任务 六.BERT与其他模型的调用 一.Word Embe ...

  2. 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1

    日萌社 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1 人工智能AI:TensorFlow Keras PyTorch ...

  3. 深度学习:词嵌入之word2vec

    http://blog.csdn.net/pipisorry/article/details/76147604 word2vec简介 深度学习在自然语言处理中第一个应用:训练词嵌入.Google 的 ...

  4. PaddlePaddle 深度学习实战(第三部分)

    PaddlePaddle 深度学习实战(第一部分) PaddlePaddle 深度学习实战(第二部分) PaddlePaddle 深度学习实战(第三部分) PaddlePaddle 深度学习实战(第四 ...

  5. 飞桨PaddlePaddle深度学习实战

    作者:刘祥龙,杨晴虹,胡晓光,于佃海 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2020-09-01 飞桨PaddlePaddle深度学习实战

  6. PaddlePaddle深度学习7日入门CV篇Summaries

    PaddlePaddle深度学习7日入门CV篇|Summaries 文章目录 PaddlePaddle深度学习7日入门CV篇|Summaries 一.什么是PaddleX? 二.为什么要参加训练营 三 ...

  7. 百度官方文档Plus版,PaddlePaddle深度学习框架介绍

    作者:木羊同学 来源:华章计算机(hzbook_jsj) 现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家 ...

  8. 国产首款——飞桨PaddlePaddle深度学习框架介绍

    现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch.究竟排名谁先谁后,还要看你是工业界还是学 ...

  9. PaddlePaddle深度学习之车牌识别

    PaddlePaddle深度学习之车牌识别 前提 数据处理 网络结构的建立(LeNet) 训练配置 测试模型准确率 前提 本代码使用的是百度的 PaddlePaddle 深度框架.整体包含数据处理,网 ...

最新文章

  1. html 高德地图坐标,百度地图,高德地图,HTML5经纬度比较
  2. conda-forge,conda,-c的理解
  3. linux python fcntl模块 程序加锁 简介
  4. 【机器学习入门笔记11:numpy模块实现矩阵的增删改查】20190217
  5. 如何打造具有绝对市场竞争力的团队
  6. mvc jquery ajax方法,Mvc Jquery Ajax功能不起作用[关闭]
  7. 介绍一些平时用得到的服务/组件
  8. 最优化理论与算法笔记
  9. python管理系统web版_Python学生管理系统(web网页版)-Go语言中文社区
  10. 红帽linux 竞争对手,为什么红帽不把CentOS当作竞争对手?
  11. linux下编译libyuv,linux.mk
  12. 【网络流24题】[CTSC1999]家园
  13. 安全测试工具_选型必看:DevOps中的安全测试工具推荐
  14. 5、Oracle备份(oracle备份脚本配置)
  15. 洪水填充算法_Unity 3D - 洪水填充/油漆桶算法不断崩溃引擎
  16. 2020年9月电子学会Python等级考试试卷(二级)考题解析
  17. 「深度」视觉的层次化处理过时了吗?
  18. Docker零基础从入门到精通(全)
  19. Mysql数据库 汉字转拼音全拼
  20. Spring/SpringBoot学习中遇到的问题记录(2):java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.views.xx

热门文章

  1. 让你的病毒库自动备份升级
  2. DNS篇之dig使用详解
  3. pyhton爬取:爬取爱豆(李易峰)微博评论,看看爱豆粉丝的关注点在哪(附源码)
  4. SDSOC加速实录-(1)加速工具及库的概述
  5. php 输出goto内容,php goto语句的使用详解
  6. 硬纪元干货|暴风集团王刚:VR2.0即将到来,行业逐步开始理性成长
  7. 罗杰软工第三次作业——结对编程
  8. 如何找回丢失的数码照片
  9. mysql load file_MySQL使用LOAD_FILE()函数方法总结
  10. 角色转变:新手项目管理的三大误区