简化转换器:使用您理解的单词进行最先进的 NLP — 第 1 部分 — 输入
一、说明
变形金刚是一种深度学习架构,为人工智能的发展做出了杰出贡献。这是人工智能和整个技术领域的一个重要阶段,但也有点复杂。截至今天,变形金刚上有很多很好的资源,那么为什么要再制作一个呢?两个原因:
- 我精通自学,根据我的经验,能够阅读不同的人如何描述相同的想法极大地增强了理解。
- 我很少读一篇文章,并认为它的解释足够简单。技术内容创作者总是倾向于过度复杂化或解释不足的概念。应该很清楚,没有什么是火箭科学,甚至火箭科学也不是。你可以理解任何事情,你只需要一个足够好的解释。在本系列中,我试图做出足够好的解释。
本系列将尝试为那些对人工智能几乎一无所知的人和那些知道机器学习的人提供一个合理的指导。在本系列中,我打算假设你知道的比我在准备本系列时阅读的变形金刚文章要精炼。
此外,我将结合直觉、数学、代码和可视化,使该系列的设计像糖果店一样——适合每个人。考虑到这是一个相当复杂的领域的高级概念,我会冒着你的想法的风险:“哇,这太慢了,停止解释明显的东西”,但如果你对自己说:“他到底在说什么?
二、变形金刚,值得你花时间吗?
有什么大惊小怪的?真的有那么重要吗?好吧,因为它是世界上一些最先进的人工智能驱动技术工具(例如GPT等)的基础,所以它可能是。
尽管与许多科学进步一样,之前已经描述了一些想法,但对架构的实际深入,完整的描述来自“注意力是你所需要的一切”论文,该论文声称以下内容是“简单的网络架构”。
如果你像大多数人一样,你不会认为这是一个简单的网络架构。因此,我的工作是努力,当你读完这个系列时,你会想:这仍然不简单,但我确实明白了。
那么,这个疯狂的图表,到底是什么?
我们看到的是一个深度学习架构,这意味着这些方块中的每一个都应该被翻译成一段代码,所有这些代码一起将做一些事情,到目前为止,人们真的不知道该怎么做。
变压器可以应用于许多不同的用例,但最著名的可能是自动聊天。一个可以谈论许多主题的软件,就好像它知道很多一样。在某种程度上类似于矩阵。
我想让人们更容易只阅读他们真正需要的东西,这样这个系列就会根据我认为变形金刚故事应该被讲述的方式进行分解。第一部分在这里,它将是关于架构的第一部分 - 输入。
三、输入
龙从蛋中孵化,婴儿从肚子里冒出来,人工智能生成的文本从输入开始。我们都必须从某个地方开始。
什么样的输入?这取决于手头的任务。如果你正在构建一个语言模型,一个知道如何生成相关文本的软件(变形金刚架构在各种场景中很有用),输入是文本。尽管如此,计算机能否接收任何类型的输入(文本、图像、声音)并神奇地知道如何处理它?其实不然。
我相信你认识一些不太擅长文字但擅长数字的人。计算机就是这样。它不能直接在CPU/GPU(计算发生的地方)中处理文本,但它肯定可以处理数字!正如您很快就会看到的,将这些单词表示为数字的方式是秘诀中的关键成分。
图片来自Vaswani,A.等人的原始论文。
3.1 分词器
标记化是将语料库(您拥有的所有文本)转换为机器可以更好地利用的较小部分的过程。假设我们有一个包含 10,000 篇维基百科文章的数据集。我们获取每个字符并对其进行转换(标记化)。有很多方法可以标记文本,让我们看看OpenAI的标记器如何使用以下文本来实现:
“许多词映射到一个令牌,但有些则不是:不可分割。
像表情符号这样的 Unicode 字符可以拆分为许多包含基础字节的标记: 🤚🏾
通常彼此相邻的字符序列可以组合在一起:1234567890"
这是标记化结果:
图片来自OpenAi,取自此处
如您所见,大约有 40 个单词(取决于您的计数方式(标点符号)。在这 40 个单词中,生成了 64 个令牌。有时标记是整个单词,如“Many,words,map”,有时它是一个单词的一部分,如“Unicode”。为什么我们要把整个单词分成更小的部分?为什么还要分句?我们本可以让他们保持联系。最后,无论如何它们都会转换为数字,那么如果令牌的长度是 3 个字符还是 30 个字符,计算机的观点有什么区别?
令牌有助于模型学习,因为文本是我们的数据,所以它们是数据的特征。设计这些功能的不同方法将导致性能变化。例如,在句子“滚出去!!!!!!”中,我们需要确定多个“!”是否与一个不同,或者它是否具有相同的含义。从技术上讲,我们可以将句子作为一个整体,但是想象一下,单独观察人群与每个人,在哪种情况下你会得到更好的见解?
现在我们有了令牌,我们可以构建一个查找字典,使我们能够摆脱单词并使用索引(数字)。例如,如果我们的整个数据集是句子:“上帝在哪里”。我们可以构建这种词汇表,它只是单词的键:值对和表示它们的单个数字。我们不必每次都使用整个单词,我们可以使用数字。例如:{其中:0,是:1,上帝:
2}。 每当我们遇到“是”这个词时,我们都会用1代替它。有关更多代币化器的示例,您可以查看Google开发的令牌器或使用OpenAI的TikToken玩更多内容。
3.2 从字到矢量
直觉
我们在将单词表示为数字的旅程中取得了很大进展。下一步是从这些标记生成数字语义表示。为此,我们可以使用一种名为Word2Vec的算法。细节目前不是很重要,但主要思想是你取一个向量(我们现在将简化,考虑一个常规列表)任何大小的数字(论文的作者使用了512),这个数字列表应该代表一个单词的语义含义。想象一个数字列表,如[-2,4,-3.7,41...-0.98],它实际上保存了一个单词的语义表示。它应该以这样的方式创建,如果我们在 2D 图上绘制这些向量,则相似项将比不同项更接近。
正如你在图片中看到的(从这里拍摄),“婴儿”接近“aw”和“睡着”,而“公民”/“州”/“美国”也在某种程度上组合在一起。
*2D词向量(又名2个数字的列表)即使对于一个单词也无法保持任何准确的含义,如前所述,作者使用了512个数字。由于我们无法绘制具有 512 个维度的任何内容,因此我们使用一种称为 PCA 的方法将维度数量减少到两个,希望保留大部分原始含义。在本系列的第 3 部分中,我们将深入了解这种情况是如何发生的。
Word2Vec 2D演示文稿 - 图片来自Piere Mergret。
它有效!您实际上可以训练一个模型,该模型将能够生成具有语义意义的数字列表。计算机不知道婴儿是一个尖叫的,剥夺睡眠的(超级甜蜜的)小人,但它知道它通常会在“aw”周围看到婴儿这个词,比“国家”和“政府”更常见。我会写更多关于这种情况是如何发生的,但在那之前,如果你有兴趣,这可能是一个查看的好地方。
这些“数字列表”非常重要,因此它们在 ML 术语中有自己的名称,即嵌入。为什么要嵌入?因为我们正在执行嵌入(如此有创意),这是将术语从一种形式(单词)映射到另一种形式(数字列表)的过程。这些是很多()。
从这里开始,我们将调用单词,嵌入,正如所解释的那样,它们是数字列表,这些数字包含它被训练表示的任何单词的语义含义。
3.3 使用 Pytorch 创建嵌入
我们首先计算我们拥有的唯一代币的数量,为简单起见,假设为 2。嵌入层的创建是 Transformer 体系结构的第一部分,就像编写以下代码一样简单:
*一般代码备注 — 不要将此代码及其约定视为良好的编码风格,它是专门为使其易于理解而编写的。
代码:
import torch.nn as nnvocabulary_size = 2
num_dimensions_per_word = 2embds = nn.Embedding(vocabulary_size, num_dimensions_per_word)print(embds.weight)
---------------------
output:
Parameter containing:
tensor([[-1.5218, -2.5683],[-0.6769, -0.7848]], requires_grad=True)
我们现在有一个嵌入矩阵,在这种情况下是一个 2 x 2 矩阵,由从正态分布 N(0,1) 派生的随机数生成(例如,均值为 0 且方差为 1 的分布)。
请注意requires_grad=True,这是Pytorch语言,表示这4个数字是可学习的权重。它们可以并且将在学习过程中进行自定义,以更好地表示模型接收的数据。
在更现实的情况下,我们可以期待更接近 10k x 512 的矩阵,它以数字表示我们的整个数据集。
vocabulary_size = 10_000
num_dimensions_per_word = 512embds = nn.Embedding(vocabulary_size, num_dimensions_per_word)print(embds)
---------------------
output:
Embedding(10000, 512)
*有趣的事实(我们可以想到更有趣的事情),你有时会听到语言模型使用数十亿个参数。这个初始的,不太疯狂的层,包含 10_000 x 512 个参数,即 5 万个参数。这个LLM(大语言模型)是困难的东西,它需要大量的计算。
这里的参数是这些数字(-1.525 等)的一个花哨的词,只是它们可能会发生变化,并且在训练期间会发生变化。
这些数字是机器的学习,这就是机器正在学习的。稍后,当我们给它输入时,我们将输入与这些数字相乘,我们希望得到一个好的结果。你知道什么,数字很重要。当你很重要时,你会得到自己的名字,所以这些不仅仅是数字,这些是参数。
为什么使用多达 512 而不是 5?因为更多的数字意味着我们可以产生更准确的含义。太好了,别想小了,那就用一百万吧!为什么不呢?因为更多的数字意味着更多的计算,更多的计算能力,更高的训练成本等等,512被发现是中间的好地方。
3.4 序列长度
在训练模型时,我们将把一大堆单词放在一起。它的计算效率更高,并且有助于模型学习,因为它将更多的上下文放在一起。如前所述,每个单词都将由一个 512 维向量(包含 512 个数字的列表)表示,每次我们将输入传递给模型(也称为正向传递)时,我们将发送一堆句子,而不仅仅是一个。例如,我们决定支持 50 个单词的序列。这意味着我们将在一个句子中取 x 个单词,如果 x > 50 我们拆分它并只取前 50 个,如果 x < 50,我们仍然需要大小完全相同(我很快就会解释为什么)。为了解决这个问题,我们在句子的其余部分添加了填充,这是特殊的虚拟字符串。例如,如果我们支持一个 7 个单词的句子,并且我们有句子“上帝在哪里”。我们添加 4 个填充,因此模型的输入将是“上帝在哪里<PAD> <PAD> <PAD> <PAD>”。实际上,我们通常会添加至少 2 个特殊的填充,以便模型知道句子的开始位置和结束位置,因此它实际上是类似于“<StartOfSentence>上帝在哪里<PAD> <PAD> <EndOfSentence>”。
* 为什么所有输入向量的大小必须相同?因为软件有“期望”,矩阵有更严格的期望。你不能做任何你想要的“数学”计算,它必须遵守某些规则,其中一个规则是足够的向量大小。
3.5 位置编码
直觉
我们现在有一种方法可以在我们的词汇表中表示(和学习)单词。让我们通过对单词的位置进行编码来使其变得更好。为什么这很重要?因为如果我们取这两句话:
1. 男人玩我的猫
2.猫和我的男人一起玩
我们可以使用完全相同的嵌入来表示这两个句子,但句子的含义不同。我们可以想到这样的数据,其中顺序无关紧要。如果我计算某事的总和,我们从哪里开始并不重要。在语言中——顺序通常很重要。嵌入包含语义含义,但没有确切的顺序含义。它们在某种程度上确实保持了秩序,因为这些嵌入最初是根据某种语言逻辑创建的(婴儿看起来更接近睡眠,而不是状态),但同一个词本身可以有多个含义,更重要的是,当它处于不同的上下文中时,它的含义不同。
将单词表示为没有顺序的文本是不够的,我们可以改进这一点。作者建议我们在嵌入中添加位置编码。我们通过计算每个单词的位置向量并将其相加(求和)两个向量来做到这一点。位置编码向量必须具有相同的大小,以便可以添加它们。位置编码的公式使用两个函数:正弦表示偶数位置(例如第 0 个单词、2d 单词、第 4 个、第 6 个等)和余弦表示奇数位置(例如第 1、3、5 个等)。
可视化
通过查看这些函数(红色的sin,蓝色的余弦),你也许可以想象为什么特别选择这两个函数。函数之间存在一些对称性,就像单词和它前面的单词之间存在对称性一样,这有助于建模(表示)这些相关位置。此外,它们输出从 -1 到 1 的值,这是非常稳定的数字(它们不会变得超大或超小)。
Formula image from the original paper by Vaswani, A. et al.
在上面的公式中,上行表示从 0 (i = 0) 开始的偶数,并继续为偶数 (2*1、2*2、2*3)。第二行以相同的方式表示奇数。
每个位置向量都是一个 number_of_dimensions(在我们的例子中为 512)向量,数字从 0 到 1。
代码
from math import sin, cos
max_seq_len = 50
number_of_model_dimensions = 512positions_vector = np.zeros((max_seq_len, number_of_model_dimensions))for position in range(max_seq_len):for index in range(number_of_model_dimensions//2):theta = pos / (10000 ** ((2*i)/number_of_model_dimensions))positions_vector[position, 2*index ] = sin(theta)positions_vector[position, 2*index + 1] = cos(theta)print(positions_vector)
---------------------
output:
(50, 512)
如果我们打印第一个单词,我们看到我们只能互换得到 0 和 1。
print(positions_vector[0][:10])
---------------------
output:
array([0., 1., 0., 1., 0., 1., 0., 1., 0., 1.])
第二个数字已经更加多样化。
print(positions_vector[1][:10])
---------------------
output:
array([0.84147098, 0.54030231, 0.82185619, 0.56969501, 0.8019618 ,0.59737533, 0.78188711, 0.62342004, 0.76172041, 0.64790587])
*代码灵感来自这里。
我们已经看到,不同的位置导致不同的表示。为了将部分输入作为一个整体(下图中以红色平方),我们将位置矩阵中的数字添加到输入嵌入矩阵中。我们最终得到一个与嵌入大小相同的矩阵,只是这次数字包含语义+顺序。
图片来自Vaswani,A.等人的原始论文。
四、总结
本系列的第一部分(红色矩形)到此结束。我们讨论了模型获取其输入。我们看到了如何将文本分解为其特征(标记),将它们表示为数字(嵌入)以及为这些数字添加位置编码的智能方法。
下文将将重点介绍编码器块(第一个灰色矩形)的不同机制,每个部分描述一个不同颜色的矩形(例如多头注意力,添加和规范等)。陈玛格丽特
相关文章:
简化转换器:使用您理解的单词进行最先进的 NLP — 第 1 部分 — 输入
一、说明 变形金刚是一种深度学习架构,为人工智能的发展做出了杰出贡献。这是人工智能和整个技术领域的一个重要阶段,但也有点复杂。截至今天,变形金刚上有很多很好的资源,那么为什么要再制作一个呢?两个原因ÿ…...
C++多线程编程(第三章 案例2,条件变量,生产者-消费者模型)
目录 1、condition_variable1.1、生产者消费者模型1.2、改变共享变量的线程步骤1.3、等待信号读取共享变量的线程步骤1.3.1、获得改变共享变量线程共同的mutex1.3.2、wait()等待信号通知1.3.2.1、无lambda表达式1.3.2.2 lambda表达式 样例代码 1、condition_variable 等待中&a…...
Go语言使用AES加密解密
Go语言提供了标准库中的crypto/aes包来支持AES加密和解密。下面是使用AES-128-CBC模式加密和解密的示例代码: package mainimport ("crypto/aes""crypto/cipher""encoding/base64""fmt" )func main() {key : []byte("…...
MAC ITEM 解决cd: string not in pwd的问题
今天使用cd 粘贴复制的路径的时候,报了这么一个错. cd: string not in pwd eistert192 Library % cd Application Support cd: string not in pwd: Application eistert192 Library % 让人一脸懵逼. 对比一下,发现中文路径里的空格截断了路径 导致后面的路径就没有办法被包含…...
解决跨域的几种方式
解决跨域的几种方式 JSONPCORS(跨域资源共享)代理 JSONP 利用script标签可以跨域加载资源的特性,通过动态创建一个script标签,然后将响应数据作为回调函数的参数返回,从而实现跨域请求资源。该方式只支持 GET 请求方式…...
单片机-LED介绍
简介 LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光 电流 越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在 3 mA-20mA 之间,通常我们会在 LED 管脚上串联一个电阻,…...
ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
错误信息 ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0 表示全局变量的初始化值不应该为0。这个错误通常出现在一些编程语言(如C、C)的编译过程中,以帮助程序员避免一些潜在的问题。 在一些编程语言中,全局变量的…...
高德地图,绘制矢量图形并获取经纬度
效果如图 我用的是AMapLoader这个地图插件,会省去很多配置的步骤,非常方便 首先下载插件,然后在局部引入 import AMapLoader from "amap/amap-jsapi-loader";然后在methods里面使用 // 打开地图弹窗mapShow() {this.innerVisible true;this.$nextTick(() > {…...
【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能
目录 1 多层索引(MultiIndex) 1.1 创建多层索引 1.1.1 从元组创建多层索引 1.1.2 使用 set_index() 方法创建多层索引 1.2 访问多层索引数据 1.3 多层索引的层次切片 1.4 多层索引的重塑 2 自定义函数和映射 2.1 使用 apply() 方法进行自定义函…...
javaee springMVC 一个案例
项目结构 pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…...
Android T 窗口层级其三 —— 层级结构树添加窗口(更新中)
序 尚未添加窗口的层级结构树,如图 DisplayArea层级结构中的每一个DisplayArea,都包含着一个层级值范围,这个层级值范围表明了这个DisplayArea可以容纳哪些类型的窗口。 每种窗口类型,都可以通过WindowManagerPolicy.getWindowLa…...
【Linux】管道
管道命令 #include <unistd.h> int pipe(int pipefd[2]); 在Linux中,管道(pipe)的返回值是一个整数数组,包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。 当成功创建一个管道时,pipe() 系统调用…...
postgre 12.11单实例安装文档
一 下载 访问https://www.postgresql.org/download/,点击左侧的‘source进行下载,一般选择bz2的安装包。 二 安装 这里安装12.11版本的postgre,数据目录路径为/data/server/pgdata,端口为5432. 2.1 安装依赖包 #安装 yum in…...
使用LightPicture开源搭建私人图床:详细教程及远程访问配置方法
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…...
基于视觉重定位的室内AR导航项目思路(1):最初的项目思路(SLAM)
文章目录 最初的项目思路(SLAM):后文: 前情提要: 是第一次做项目的小白,文章内的资料介绍如有错误,请多包含! 最初的项目思路(SLAM): 由于我们在…...
小白学go基础05-变量声明形式
和Python、Ruby等动态脚本语言不同,Go语言沿袭了静态编译型语言的传统:使用变量之前需要先进行变量的声明。 变量声明形式使用决策流程图 这里大致列一下Go语言常见的变量声明形式: var a int32 var s string "hello" var i 13 …...
高可用Kuberbetes部署Prometheus + Grafana
概述 阅读官方文档部署部署Prometheus Grafana GitHub - prometheus-operator/kube-prometheus at release-0.10 环境 步骤 下周官方github仓库 git clone https://github.com/prometheus-operator/kube-prometheus.git git checkout release-0.10 进入工作目录 cd kube…...
ardupilot 安装gcc-arm-none-eabi编译工具
目录 文章目录 目录摘要0简介1.下载网站2.安装摘要 本节主要记录ardupilot使用的编译器安装过程。 0简介 gcc-arm-none-eabi是GNU项目下的软件,是一个面向裸机arm的编译器。那么说了这么多介绍,它都包含什么具体功能又怎么安装与使用呢,我们继续。 1.下载网站 gcc-arm-n…...
ORACLE集群管理-19C RAC重新配置IPV6
1 问题概述 数据库已经配置和IPV6和 IPV4双线协议,需要重新配置IPV6 2 关闭相关资源 1 root用户执行 ./srvctl stop scan_listener -i 1 ./srvctl stop scan ./srvctl stop listener -n orcldb1 ./srvctl stop listener -n orcldb2 ./srvctl stop vip -n orcldb…...
Mybatis实体类属性与数据库字段的对应关系
方法一:起别名 select t_id(数据库字段) tId(类的属性), ... , ...from 表名 方法二:开启驼峰映射 <!-- 开启驼峰映射 数据库 s_id java类 sId--><setting name"mapUnderscoreToCamelCase" value"true"/> 当java类中属性命名…...
Unity(三) Shader着色器初探
学习3D开发技术的时候无可避免的要接触到Shader,那么Shader是个什么概念呢?其实对于开发同事来说还是比较难理解的,一般来说Shader是服务于图形渲染的一类技术,开发人员可以通过其shader语言来自定义显卡渲染页面的算法࿰…...
苹果电脑要安装杀毒软件吗?mac用什么杀毒软件好?
对于这个问题让人很是纠结,Mac不需要杀毒这个理论一直都深入人心,Mac OS X权限管理特性可以防毒的说法也一直甚嚣尘上,很多小伙伴如我一样搞不清楚到底要不要安装杀毒软件。,毕竟当前个人信息安全泄露泛滥不穷的年代,我…...
MySQL——索引
索引在 MySQL 数据库中分三类: B 树索引Hash 索引全文索引 目的:在查询的时候提升效率 b树 参考:https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引,是数据库管理系统中一个排序的数据结构…...
110. 平衡二叉树
题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 递归法: 我的代码: *** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* Tree…...
遗忘因子递推最小二乘参数估计(FFRLS)
基于遗忘因子的最小二乘法电池参数辨识 最小二乘法是系统辨识中最常用的一种估算方法。为了克服最小二乘法存在”数据饱和”的问题,我们通常采用含有遗忘因子的递推最小二乘法(Forgetting Factor Recursive Least Square,FFRLS)算法进行电池模型的参数辨识。 1、二…...
【redis进阶】基础知识简要回顾
1. 常见功能介绍 聚合统计 使用list集合的差集、并集来统计 排序统计 SortedSet(ZSet)统计,再利用分页列出权重高的元素 二值状态统计 BitMap存储,获取并统计 SETBIT uid:sign:3000:202008 2 1 GETBIT uid:sign:3000:202008 2…...
HTML5-3-表格
文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr:tr 是 table row 的缩写,表示表格的一行。td:td 是 table data 的缩写,表示表格的数据单元格。th:th 是 table header的缩…...
Spring Boot + Vue的前后端项目结构及联调查询
Spring Boot Vue的前后端项目结构及联调查询 当你刚开始学习前后端开发时,可能会感到有些困惑和不知所措。下面是一些建议,希望能为你的学习之旅提供一些启示: 建立坚实的基础知识:学习前后端开发的第一步是建立坚实的基础知识。…...
Transformer貌似也是可以使用state递归解码和训练的
import paddle import numpy as npclass HeadLoss(paddle.nn.Layer):def __init__(self):super(HeadLoss, self).__init__()...
振弦采集仪应用地铁隧道安全监测详细解决方案
振弦采集仪应用地铁隧道安全监测详细解决方案 随着城市化进程的不断加快,地铁作为一种高效、便捷、环保的交通方式已经成为现代城市不可或缺的一部分。因此,对地铁的安全性也越来越重视,一般二三线以上的城市在不断发展中,地铁做…...
邢台网站设计厂家/深圳seo网络优化公司
本章主要根据对vue cli 3的简单理解,和vue-cli 2进行简单的对比;整理比较简单 首先从文档介绍看,两者就有巨大的区别vue cli 3vue cli 2一个基于 Vue.js 进行快速开发的完整系统用于搭建 Vue.js 项目的简单CLI版本2,只提供了基于「…...
柳市网站建设/网上商城网站开发
linux环境下,使用binlog模式恢复mysql数据(mysql数据库中的一张表误删了怎么找回?)。 问题:linux中开启binlog模式下,mysql数据库中的一张表误删了怎么找回? 1.首先在mysql中查看是否开启binl…...
福州网络营销网站/百度小说排行榜风云榜单
采坑记录: 1.web3j-android 2.web3-j 采坑记录 打断点 不断轮询 算法本身因为强度需要不断调用循环 安卓本身内存限制会造成内存溢出。 人就会另眼相看 加载钱包文件 通过助记词创建 标准的创建过程 swift android java 都是一样的。 1.128bit-助记词-推出主私钥-创…...
wordpress套模板教程/查询网域名查询
69、django之Form组件 本篇导航: 小试牛刀Form类常用选择插件自定义验证规则初始化数据Django的Form主要具有一下几大功能: 生成HTML标签验证用户数据(显示错误信息)HTML Form提交保留上次提交数据初始化页面显示内容一、小试牛刀…...
网站开发助理主要工作/百度竞价关键词优化
什么是数据库同步指在存储类型、格式和计算机系统之间的数据转换,这个名词没有严格的定义,反正就那个意思mysql配置mysql要实现数据库同步,得配置下才行。看是否有my.ini文件,有就直接跳过到第4步,如果没有就跟着我的操…...
园区 网站建设方案/平台推广是做什么
冒泡排序 介绍 重复遍历要排序的元素列,依次比较两个相邻的元素,前一个元素若比后一个元素大则互换位置。以升序排序为例,最大的元素会在第一次遍历后“冒泡”到数组的末端。假如数组长度为n,在n-1次遍历后可完成排序。 实现 let …...