向量数据库Pinecone,治疗ChatGPT幻觉的药方?

大白话了解新鲜事,今天讲讲以Pinecone为代表的向量数据库。向量数据库Pinecone一夜爆火,4月27日B轮拿到了1亿美元的融资,估值达到7.5亿美元,一个2021年刚刚推出的数据库产品,火爆背后的原因是什么?

 

0背景

自从AutoGPT,以及ChatGPT的Retrieval plugin推出之后(二者都推荐使用Pinecone),Pinecone的热度就快速上升,那么向量数据库和ChatGPT有什么关系?

人们常常把大语言模型比喻成大脑,但这是一个被切除了颞叶的大脑,缺乏记忆,并且常常出现幻觉。」解决这些问题,我们常常需要借助向量数据库,这是它近期出现热度的原因。

失忆:ChatGPT没有记忆能力,有的人可能要说它明明记得我前面说过的话,这其实是因为你每一次prompt的时候,客户端会把「当前会话」所有的聊天记录作为一个大的prompt发给ChatGPT。因此,当你点击ChatGPT左侧的“New chat”新建会话后,ChatGPT就会忘了你说过的所有内容。

幻觉:大型语言模型会产生幻觉(Hallucination),指的是它会返回语法正确但语义上不正确的回答,这种胡说八道的情况,相信只要用过几次ChatGPT的小伙伴应该都遇到过。幻觉出现的原因是眼下的大语言模型还做不到真正理解语义(指像人类一样理解),它更多的是一种数学上的抽象推理,就像Meta的首席科学家Yann LeCun的所说,「大型语言模型正在编造东西,努力生成合理的文本字符串,而不理解它们的含义。」

 

02 向量

一个物体在平面上的位置可以用一个二维向量表示,如[3, 4],其中3表示横向的距离,4表示纵向的距离。又或者,一个飞机在三维空间中的位置可以用一个三维向量表示,如[2, 3, 4]。更高维的向量以此类推。不严格地说,向量就是一个数组,数组的长度就是向量的维度。

也可以具象化的理解向量,以上面的飞机为例,向量就是从三维坐标系原点出发指向飞机所在位置的一段箭头。

这样帮助我们后面更容易理解什么是向量之间的「相似度」——即两个箭头靠近的程度。怎么计算呢?最简单的就是“余弦相似度”——两个箭头之间的夹角越小,则两个向量相似度越高。

 

03 向量化

怎么将单词转化为向量表示呢?你可以硬编码,例如如果你的世界里只有苹果和梨,我们可以将苹果硬编码为二维向量[1, 0],将梨硬编码为[0, 1]

当然世界并不是只有苹果和梨,还有许多其他东西,这样向量化的维度太高(数组太长)、太稀疏(0值太多)、而且缺乏语义。现在人们都是用模型来生成向量(即embeddings),可以压缩维度,还能保留语义。保留语义的意思是,语义越相近的文本(如「ocean」和「sea」),embedding生成的向量相似度也越高。

Huggingface上有不少开源的embeddings模型,OpenAI也提供了text-embedding-ada-002模型来将文本向量化,有兴趣的可以看看。

 

04 向量数据库

向量数据库是一种专门用于存储和处理向量数据的数据库系统,它能够高效地进行向量相似度查询,这个「向量相似度」我们上面介绍过了。

向量数据库如何帮助大语言模型缓解记忆缺失和幻觉的问题呢?

原理很简单,针对幻觉问题,可以将所需领域的专业知识存入向量数据库,当要prompt时,系统自动的从向量数据库中根据「相似度」查找最相关的专业知识,把这些知识和你的prompt一同提交给ChatGPT,这样就可以有效减少幻觉的出现。记忆的问题也类似,可以选择把部分你和ChatGPT的聊天记录存入向量数据库,ChatGPT Retrieval plugin提供了这样的接口。

目前这种OP stack模式(OpenAI + Pinecone)已经逐渐在业界流行,连带着包括Weaviate、Milvus这类竞品的热度也在上涨,前几天翻看Redis官网的时候发现他们家也推出了向量数据库产品Redis VSS。

靠着紧抱AI大腿,向量数据库热度将会持续。另外公有云厂商如阿里云、AWS、GCP等,预计也会加大自己的向量数据库的开发投入。而互联网大厂作为各种AI模型的研发方和落地方,未来同样免不了加大对自研向量数据库的投入。所以,有兴趣的小伙伴可以深入学习一下,看看这个领域里还有什么花样可以玩。

 

对了,如果有小伙伴还没试用过ChatGPT,我搭了一个小跳板,关注公众号“后厂村思维导图馆”,私信留言索要,同时,也可留言索要各类高清无水印思维导图,记得留下邮箱哦

本文转载于网络 如有侵权请联系删除

相关文章

  • SD-WAN进化路径:整合网络、安全与人工智能

    SD-WAN由于将网络与安全功能的融合而受到欢迎,MPLS+下代墙+云安全等。但实际上它能做的更多。比如,融合人工智能技术,提供数据分析、虚拟助手和增强安全等。实际上,SD-WAN正在成为企业多云环境下的新中心。下面是SD-WAN如何解决IT挑战的演进路线: 昨天--解决SaaS挑战近年来SaaS的激增,是因为它的快速实施、容易升级,以及无需在基础设施上进行投入,甚至无需增加人员。随着SaaS的增长,对网络尤其是WAN(广域网)的影响非常之大。传统的WAN无法满足SaaS驱动的业务需求,于是软件定义广域网(SD-WAN),成为上云企业的优选。更加重要的,SD-WAN为网络、安全与AI的融合铺平了道路,帮助企业在转向云端时面临的IT挑战。今天--应对云安全挑战云应用的普及给安全人员带来了极大的工作压力,忙于填补那些由于“用户下载即用甚至访问即用”,即所谓的影子IT而带来的安全空白。例如SaaS的应用就是一个严重的安全威胁,这些应用可以在任何地点但同一时间产生大量的访问,IT或安全部门再也无法像本地环境那样监控应用程序的使用。大多数使用云服务的企业,其IT部门根本不知道员工使用了多少种云服

  • Spring技术知识点总结之三——Spring Bean 的注入过程

    接上篇《Spring技术知识点总结之二——SpringMVCDispatcherServlet》三.SpringBean的注入过程Springioc容器的核心类是AbstractApplicationContext,入口是refresh()方法,该方法是个模板方法,定义了加载到容器的全部过程。@Override publicvoidrefresh()throwsBeansException,IllegalStateException{ synchronized(this.startupShutdownMonitor){ prepareRefresh(); ConfigurableListableBeanFactorybeanFactory=obtainFreshBeanFactory(); prepareBeanFactory(beanFactory); try{ postProcessBeanFactory(beanFactory); //注册BeanDefinition到BeanDefinitionRegistry中 invok

  • 《数字集成电路静态时序分析基础》笔记⑧

    网络课程《数字集成电路静态时序分析基础》的笔记 地址:https://www.iccollege.cn/portal/courseDetail/193.mooc多周期半周期伪路径多周期路径通常对于普通路径来说,路径延迟是T,但是某些情况下,中间延迟远远大于一个周期T。建立时间检查多周期时序约束一个简单的例子,对于多周期路径,建立时间检查边沿会推到第三个周期多周期时序路径,launchpath和普通的没有区别而capturedpath有些不一样,clockCLKM的incr达到了30,也就是三个周期。保持时间检查对于hold来说,如果按照默认的边沿,所需要保持的时间就会非常长,过于严格,通过下面的约束可以将保持时间检查边沿向前移动两个边沿。保持时间报告默认的话,clockCLKP应该是20(建立时间检查边沿前一个),由于设置了前面的约束,变成0了。如果建立时间多周期约束了N,而保持时间N-1没有设定,那么会发生什么?时序路径就会变化,launchpath没有变化,主要是capturepath变化了clockCLKP变成了20,时序不满足。半周期路径普通路径的触发时钟边沿是一致的,对于一个

  • 制作域的数字媒体格式和编码器简介

    原标题:ASimpleGuidetoFormatsandCodecs原文链接:https://www.tvtechnology.com/news/a-simple-guide-to-formats-and-codecs翻译整理:虞盛炜介绍你是否曾为各式各样的视频文件格式所烦恼?或者抱怨“我明明只要一个QuickTime视频文件啊”?本文将对数字媒体的格式和编码器进行一个简单的介绍,希望能对你有所帮助。数字媒体文件由格式封装、数据和元数据组成。格式封装定义了文件的类型,如.mpeg、.mov、.mp4、.mp4、.mxf等。可以把封装理解为一盘录像带,它标明了哪个播放器应该与该文件兼容,就像VHS卡带需要一个VHS播放器一样。数据是指包含在该封装中的音频/视频内容。元数据是一些关于数据的信息,如日期/时间戳、颜色配置文件等。如何理解这些数据使用编码器,音/视频信号被编码为数字文件。大多数视频文件会用到数据压缩,而专业格式的音频信号通常是无压缩的。另一方面,消费类音频格式,如.mp3和.m4a等使用了高度压缩的编解码器。虽然我们常常将某些编解码器与特定的格式联系在一起,如ProRes和.m

  • Linux CentOS6编译安装Pyt

        CentOS6.x系统中一直沿用的都是Python2.6.x(目前最新版本是python-2.6.6),有时不能满足某些应用生产环境和开发环境的需要,直接从yum官方仓库和epel中安装Python2.7(目前最新版本是python-2.7.12)似乎也是没有什么可能,除非使用更三方的软件源。CentOS6.x系统中有很多系统组件是使用Python2.6的,比如刚才提到的yum,但yum不一定是唯一依赖Python2.6的程序,尽管一般的生产环境中不会使用到特别混杂的运行环境,但在使用的过程中需要留意某些工具&程序是否能在Python2.7下正常运行。    安装Python2.7.x实际上非常简单,唯一需要了解的是,编译安装Python2.7.x时必须将使用--enable-shared(enablebuildingsharedpythonlibrary)选项用来安装python动态链接库(shareobject,/usr/lib64/libpython2.7.so.1.0),这一文件会被很多python模块(甚至python本身)所用到,当没有使用这一选项时可以加上

  • 亚马逊Fire TV接入Alexa语音助手,可使用Alexa设备操控

    亚马逊为FireTV与电视棒软件升级,接入了Alexa语音助手,可使用Alexa设备操控。亚马逊似乎希望自家所有的产品都能接入Alexa设备。FireTV机顶盒和电视棒软件现在在升级之后就可以用Alexa设备操控了,对于喜欢语音助手的用户来说是一则好消息。用户可以按照提示给FireTV升级,升级之后用户可以用Alexa设备如Echo、EchoDot控制。升级后软件的版本要么是FireOS5.2.4.1,要么是5.2.4.2,具体看你使用的是什么设备。现在,你可以用Alexa设备发送播放命令,比如播放、暂停、倒回等等,还可以打开App、搜索亚马逊电影电视媒体库。如果你的FireTV自带VoiceRemote,那么设备本身已经内置了Alexa,只需要按一下遥控按钮就能激活Alexa。使用Alexa时完全没有必要用手操作。软件升级覆盖所有FireTV设备,包括一代FireTVStick。在使用之前,要将两款设备通过AlexaApp配对。据悉,亚马逊的新款FireTV流媒体电视棒,尽管价格仍为40美元,但硬件上已有实用提升。新设备看起来与前者无差别,但已升级四核处理器且支持802.11acWi

  • 动画系统的一些功能

    最近在做动画系统的一些重构工作,顺便就看了下成熟的引擎的动画部分.之前做过一个动作游戏的预研,所以对这部分感触比较大,因为相比业界一流的厂商,动画技术可以说是国内游戏开发最落后的的一部分了在我看来,动画系统分成这么几个级别吧:可以把DCC中制作的动作导入播放,有Play/Stop/Pause之类的接口.开源或者自研的引擎多停留在这一阶段在多个动画之间可以定义混合转换方式,可以很好地处理不动动作之间的衔接过渡.如GameBryo,Vision等有动画状态机和BlendTree,可以使用参数控制播放不同的动作,如Unity,Unreal,Havok,Morpheme等把动画与物理系统结合,实现环境交互,IK,碰撞反应,Ragdoll等.通常实现了3的也会把4顺便做了把动画与行为系统结合,做出真实的人物行为表现.这部分就上升到AI层次了,这方面NaturalMotion业界领先苦逼的我们还在2挣扎.引入动画中间件可以快速上升到4,5的话目前游戏应用比较少下面是一些最近阅读文档遇到的一些技术名词,来源于Unity,Vision,Havok:AnimationClip(同AnimationSeq

  • 普元信息政务大数据咨询顾问夏佳斌:数据资源体系的核心——资源定义、运营机制和支撑平台

    12月1日下午,由上海大数据联盟、数据猿主办的第20期魔方大数据在上海宝华万豪酒店成功举办。本期魔方大数据以“政务大数据”为主题,邀请了技术方和产业方大咖共聚一堂,共同探讨了政务大数据落地实施的有效路径作者|夏佳斌官网|www.datayuan.cn微信公众号ID|datayuancn12月1日下午,由上海大数据联盟、数据猿主办的第20期魔方大数据在上海宝华万豪酒店成功举办。本期魔方大数据以“政务大数据”为主题,邀请了技术方和产业方大咖共聚一堂,共同探讨了政务大数据落地实施的有效路径。以下是数据猿整理“普元信息政务大数据咨询顾问夏佳斌”的发言实录:今天我想从两方面和大家分享一下政务框架体系,第一方面是从我多年的实践出发介绍下政务框架体系。第二方面是结合实际情况,探索下如何实现政务大数据的落地。去年9月份有一个客户提出要建内存数据库,深入的交谈后我了解到,他是希望建设一个数据库,即使应用进行了改造升级也不会影响他继续使用原来的数据。除此之外他还提出了另外几点要求,希望对所有数据的访问都有统一的管控,数据优化有统一的入口,保证政府数据的安全性和可靠性,数据不用后物理数据依旧存在等。这个客户

  • 突破IT主流使用环境局限 虚拟化2015五步走

    对于2015年IT行业预测,有很多老生常谈:VMware公有平台即服务(PaaS)登场;亚马逊发布DevOps云平台;或者Docker首次公开募股已达到十亿美元。CATechnologies则认为,2015年虚拟化将成为主流。虚拟化自从20世纪60年代,或者说从2005年开始就已经成为主流。尽管如此,虚拟化也仅仅是在IT行业内成为“主流”;或许说是在相对少数的底层程序员之间成为主流。而一位公司高管真正关心的话题,可能是软件定义一切。在2015年,虚拟化将通过以下五种方式步入一个更广阔的业务和客户使用环境,而不是局限于IT主流使用环境。虚拟设备助力实现BYOD——移动虚拟机(MobileVM)时代已经过去。尽管如此,在2015年,全新虚拟化方法如集装箱技术(containers,由行业领导者三星和CATechnologies支持)将会被百万甚至上十亿的消费者和公司使用,通过更灵活、定制化和更高效的方法实现BYOD。虚拟安全助力实现BYOID——面对每天可能发生的数据泄漏,主流使用者更加关心密码风险问题,尽管如此他们仍然厌倦繁琐的解决方案,尤其是在移动设备上。在2015年,企业用户和消费者

  • Linux下TCP连接过程总结

    一、Linux服务器上11种网络连接状态:    图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN:(同步序列编号,SynchronizeSequenceNumbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。ACK:(确认编号,AcknowledgementNumber)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。FIN:(结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN./*Thesocketislisteningforincomingconnections.侦听来自远方TCP端口的连接请求*/ 2)、SYN_SENT:客户端通过应用程序调用connect进行activeopen.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. /*Thesocket

  • 记一个同时支持模糊匹配和静态推导的Atom语法补全插件的开发过程: 序

    简介过去的一周,都睡的很晚,终于做出了Atom上的APICloud语法提示与补全插件:apicloud_autocomplete.个中滋味,感觉还是有必要记录下来的.代码基于GPL-3.0开源,所以我可以较为详细的记录一些很难被理解和体会的技术细节.APICloud目前已有Studio,VSCode,Webstrom和Sublime的语法补全插件,但是毫无疑问,我做的这款,是目前为止最好的--唯一的一个支持100%所有API,唯一的一个同时支持模糊匹配和静态推导语法提示插件!可能你会说,估计是Atom语法补全的扩展机制灵活等等吧!但是,我可以很明确地告诉你,核心逻辑是基于正则匹配的通用逻辑,和Atom没有必然的联系!apicloud_autocomplete,需要多个技术栈的创造性地混合使用,某种程度上,这个系列的文章,就是写给全栈开发工程师的赞歌!哈哈~你会耐心读完整个系列文章的N个可能性你可能想做一个ReactNative或者Weex的API级别的语法提示与补全插件!注意,我说的是精确到特定API的提示,而不是简单的通用语法提示.比如现在有好多jsx语法自动补全的提示,但是并没有能

  • gRPC(2):四种基本通信模式

    在gRPC(1):入门及简单使用(go)中,我们实现了一个简单的gRPC应用程序,其中双方通信是简单的请求—响应模式,没发出一个请求都会得到一个响应,然而,借助gRPC可以实现不同的通信模式,这里介绍四种gRPC应用程序的基础通信模式:一元RPC、服务端流RPC、客户端流RPC、双向流RPC 1、一元RPC 一元RPC也被称为简单RPC,其实就是gRPC(1):入门及简单使用(go)中实现的请求—响应模式,每调用一次得到一个结果,这里再以一个简单的订单管理程序做说明,实现两个服务:addOrder用于添加订单;getOrder用于根据id获取订单: 服务定义 syntax="proto3"; packageproto; optiongo_package="./proto"; serviceOrderManagement{ rpcaddOrder(Order)returns(StringValue); rpcgetOrder(StringValue)returns(Order); } messageOrder{ stringid=1; repeatedstringitems=2;

  • PHP常见问题整理

    1.如何在Windows下配置PHP开发环境? (1)下载并安装Apache,设置服务器的侦听端口。编辑Apache安装目录下的conf子目录中的httpd.conf文件,定位到DocumentRoot这一行,可以修改该目录路径。定位到DirectoryIndex这一行,在后面添加一个PHP默认页index.php。定位到标签名为Directory的标签块,在后面添加AddType application/x-httpd-php .php .phtml .php3 .php4。定位到LoadModule这一行,添加LoadModule php5_module PHP安装路径\php5apache2.dll。 (2)安装并配置MySQL。 (3)下载PHP的安装包,解压到指定目录下。将所有.dll文件复制到C:\Windows\system32目录下,将php.ini文件复制到C:\Windows\目录下。编辑php.ini,定位到extension_dir所在行,将扩展目录改为php安装路径下的ext目录。查找定位e

  • 电信计费业务:预后融合分话单

    欠费问题一直是电信企业困扰的问题。最开始的时候,电信企业采用后付费的模式,也就是每个月计算一次费用,如果在一定期限内没有交清费用就停机。移动业务发展后,由于用户可能因为当月的费用较多而停止用这张卡,所以就采用了每次使用业务就计算一次费用的模式,如果计费完的余额不足,就发起停机。后面发现,单次使用业务也可能产生很大的费用,(特别是数据业务),就有了在线计费(实时计费),每次使用业务前都会判断余额,只预留出可以使用的时间(或者流量),在用完余额后,就会中断业务的使用。 在准实时计费和实时计费之间,实际还存在一种折中的解决方案,那就是分话单计费,所谓分话单计费,就是产生话单的交换机,对可能会产生高额费用的话单进行分割,比如用户在使用语音业务,在打了30分钟电话后,交换机先出一张话单出来给计费,计费完成后判断是否余额足够,如果不足就发出停机,网络侧在收到停机单后,中止用户通信(这一点存有疑问,问过一些熟悉的人士,有些说可以中止,有些说不能中止,期待解答),避免造成高额的欠费。   然而对于计费,如果不对分话单进行单独处理,可能会造成计费的错误。比如一条2分钟的话单,被切割成61秒和5

  • 复利(结对2.0)总结

    结对同伴: 名字:丘惠敏 学号:201406114204 博客地址:http://home.cnblogs.com/u/qiuhuimin/   一、项目简介 开发工具:VC++ 开发语言:C语言 主要功能:复利计算、单利计算,投资计算   二、新增功能     把界面做得漂亮好操作一点   三、估计 估计用时:5小时 实际用时:3小时 估计代码行数:150行左右 实际代码行数:200行左右   四、任务分配 丘惠敏——驾驶员 1.前期的分析、设计; 2.用代码实现功能; 郭明茵——领航员 1.对代码进行复审,完善代码; 2.代码的风格规范和设计规范。   五、新增代码 新增的两个函数和main函数 voiddisplay(intx)//输出列表函数 { inti,j; for(i=0;i<13;i++)//循环打印列表 { if(x==2&&i==5)//x=2时,打开目录的子菜单 { for(j=0;j<3;j++) { printf("\t%s",list2[j

  • python创建txt文件_Python文件读写:字典dict与txt文件互相转换

    label_to_id: B-LOC0 B-ORG1 B-PER2 I-LOC3 I-ORG4 I-PER5 O6 复制 dict->txt withopen('data/label_dict.txt','w')asdict_f: fork,vinlabel_to_id.items(): dict_f.write(str(k)+''+str(v)+'\n') 复制 txt->dict label_dict={} withopen('data/label_dict.txt','r')asdict_f: forlineindict_f.readlines(): line=line.strip() k,v=line.split('') label_dict[k]=int(v) 复制

  • 主生产计划(MPS)及物料需求计划(MRP)

    主生产计划(MasterProductschedule,MPS) 就是已经确定的销售订单(合同)和预测销售目标(也就是说近期要销售的产品,有指定的交货日期了)。   主生产计划(MasterProductionSchedule,简称MPS)。MPS是闭环计划系统的一个部分。MPS的实质是保证销售规划和生产规划对规定的需求(需求什么,需求多少和什么时候需求)与所使用的资源取得一致。MPS考虑了经营规划和销售规划,使生产规划同它们相协调。它着眼于销售什么和能够制造什么,这就能为车间制定一个合适的“主生产进度计划”,并且以粗能力数据调整这个计划,直到负荷平衡。   MRP根据主生产计划的要求,结合BOM(物料清单)与库存数据,逆向求出各个成品的需求时间与数量,各个物料的需求时间与数量,即计划生产工单和计划采购订单,可以说是主生产计划的实际体现。 MRP是一种以计算机为基础的编制生产与实行控制的系统,它不仅是一种新的计划管理方法,而且也是一种新的组织生产方式。MRP的出现和发展,引起了生产管理理论和实践的变革。MRP是根据总生产进度计划中规定的最终产品的交货日期

  • vue初学实践之路——vue简单日历组件(2)

    上一篇我们已经实现了基本的日历显示功能,这一次我们要加上预定的功能 废话不多说,上代码 <divid="calendar"> <!--年份月份--> <divclass="month"> <ul> <!--点击会触发pickpre函数,重新刷新当前日期@click(vuev-on:click缩写)--> <liclass="arrow"@click="pickPre(currentYear,currentMonth)">❮</li> <liclass="year-month"@click="pickYear(currentYear,currentMonth)"> <spanclass="choose-year">{{currentYear}}</span> <spanclass="choose-month">{{currentMonth}}月</span> </li> <liclass="arrow"@click="pick

  • 洛谷 P1026 统计单词个数

    题意 给出一个长度不超过200的由小写英文字母组成的字母串(该字串以每行20个字母的方式输入,且保证每行一定为2个)。要求将此字母串分成k份,且每份中包含的单词个数加起来总数最大。 每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串this中可包含this和is,选用this之后就不能包含th。 单词在给出的一个不超过6个单词的字典中。 要求输出最大的个数。 做法 动态规划加上暴力枚举,数组f[i][j]表示前i个字符分成j段的最多单词数。 代码 #include<bits/stdc++.h> usingnamespacestd; intp,k; stringc; stringq; ints; stringd[7]; intf[205][45]; intcnt(intl,intr) { intans=0; for(inti=l;i<=r;++i) { for(intj=1;j<=s;++j) { intos=d[j].size(); if(os>r-i+1)continue; stringiu; for(intjj=0;

  • mybatis

    mybatis   什么是MyBatis?MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录。 为什么要使用MyBatis?无论是Mybatis、Hibernate都是ORM的一种实现框架,都是对JDBC的一种封装!   持久层中的几种技术: Hibernate(一个比较老旧的框架) 优点:用起来十分舒服,sql代码都不用写缺点:处理复杂业务时,灵活度差,复杂的HQL难写难理解,例如多表查询的HQL语句JDBC 优点:易理解,几个固定的步骤缺点:开发起来太麻烦,什么都需要自己写SpringDAO 其实是JDBC的一层封装就类似于dbutils一样可以认为,MyBatis就是jdbc和Hibernate之间的一个平衡点 MyBatis在IBatis的基础上做了哪些大的改进?有接口绑定,包括注解绑

  • 【Caffe篇】--Caffe从入门到初始及各层介绍

    一、前述 Caffe,全称ConvolutionalArchitectureforFastFeatureEmbedding。是一种常用的深度学习框架,主要应用在视频、图像处理方面的应用上。caffe是一个清晰,可读性高,快速的深度学习框架。作者是贾扬清,加州大学伯克利的ph.D,现就职于Facebook。caffe的官网是http://caffe.berkeleyvision.org/。  二、具体 1、输入层 layer{ name:"cifar" type:"Data" top:"data"#一般用bottom表示输入,top表示输出,多个top代表有多个输出 top:"label" include{ phase:TRAIN#训练网络分为训练阶段和自测试阶段,如果没写include则表示该层即在测试中,又在训练中 } transform_param{ mean_file:"examples/cifar10/mean.binaryproto"#用一个配置文件来进行均值的操作 transform_param{ scale:0.00390625 mirror:1#1表示开启镜

相关推荐

推荐阅读