- 博客(55)
- 收藏
- 关注
原创 LangGPT结构化提示词
LangGPT是Language For GPT-like LLMs的简称,中文名为结构化提示词,LangGPT是一个帮助你编写高质量提示词的工具,理论基础是我们提出的一套模块化、标准化的提斯提编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱,为大众提供一套可操作、可复现的提示词方法论、工具和交流社群。我们的愿景是让人人都能写出高质量提示词。
2024-08-18 23:40:41 1271
原创 提示词工程
提词工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其结果的技术。在模型回复的过程中,首先获取用户输入的文本,然后处理文本特征并根据输入文本特征预测之后的文本,原理为next token prediction。提词工程师模型性能优化的基石,有以下六大基本原则:①指令要清晰②提供参考内容③复杂的任务拆分成子任务④给LLM思考时间(给出过程)⑤使用外部工具⑥系统性测试变化。
2024-08-18 23:23:08 906
原创 第三关:Git 基础知识
Git是一种开源的分布式版本控制系统,广泛应用于软件开发领域,尤其是在协同工作环境中。它为程序员提供了一套必备的工具,使得团队成员能够有效地管理和跟踪代码的历史变更。
2024-08-02 22:51:41 1024
原创 Python中的Numpy库使用方法
NumPy数组(ndarray)是NumPy库的核心数据结构,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray本质上是一个存放同类型元素的多维数组,其中的每个元素在内存中都有相同存储大小的区域。:ndarray对象在内存中连续存储,这使得对数组的元素进行切片和迭代等操作非常快速,而不需要额外的内存开销。:NumPy数组的操作是在编译后的代码中执行的,这使得NumPy操作比纯Python代码快得多。:NumPy提供了大量数学和数值计算函数,使得数组操作非常方便。
2024-07-26 12:12:38 1044
原创 Python数据结构的常用方法
但是alist与b的id相同,说明他们两在内存中指向的是同一个对象。提到for循环就不能不提经常与它一起出现的range(start,stop,step)函数,他会生成一个可迭代的对象,以step步长生成[start,stop)。第二种方法我们使用python在3.6推出的f-sting功能,只需在字符串开头加上f,该字符串中的{}中的python代码就会被评估。第一种为使用字符串的.format()方法,并在在字符串中需要插入值的地方用{}代替,{}也可以加入变量名,方便赋值。
2024-07-26 11:09:38 263
原创 Linux常用命令
使用touch快速的创建文件,这样我们不用手动点击进行创建了。例如我们要创建一个文件:同样的使用方法,如果要创建一个名为的目录:我们现在使用的是目录,也是root用户的家目录,linux操作系统中表示根目录,根目录下有许多系统所需的目录和文件,刚才我们创建的目录就存在与目录下,其中表示的是当前目录,表示的上级目录。如果我现在要进入到目录,然后回到目录,我们可以这样操作:我们可以使用命令查看当前所在的目录:这样可以方便我们确定我们当前所在哪个目录下面。命令可以查看文件里面的内容,更多的使用命令可以使用命令查看
2024-07-25 21:06:29 868
原创 Sequence to Sequence Learningwith Neural Networks
深度神经网络(DNN)非常强大,可以在困难的学习任务上取得非常优异的性能。尽管只要有大型标记训练集可用。DNN存在缺陷:不能用于将序列映射到序列。一种通用的端到端序列的学习方法,该方法对序列结构做出最少的假设,使用多层长短期记忆(LSTM)将输入序列映射到固定维度的向量,然后使用另一个深度LSTM从向量解码目标序列。结果:从WMT'14数据集的英语到法语翻译任务中,LSTM生成的翻译在整个测试集上的BLEU(评估质量)得分为34.8。
2024-07-11 09:23:29 588
原创 Adversarial Reweighting for Partial Domain Adaptation(论文阅读)
首先指出深度学习模型的问题:依赖大量的标签训练数据、需要昂贵和耗时量大的标记过程。上述观察结果表明,通过重新加权的分布对齐来调整特征提取器对源数据权重的中的噪声不具有鲁棒性,并且在一些具有挑战性的数据集上可能导致负迁移。但是,令人惊讶的是,在源分类损失中重新加权数据重要性可能比重新加权分布对齐损失对噪声权重的鲁棒性更强在本文中,作者通过实验观察到,通过重新加权分布对齐来适应特征提取器对源域数据的“噪声”权重不具有鲁棒性,并且可能会损害目标域的学习性能。
2024-07-09 16:36:28 434
原创 详解数据结构:字符串
串:又称字符串,是由零个或多个字符组成的有限序列。字符串通常用双引号括起来,例如S=”abcdefg”,S为字符串的名字,双引号里面的内容为字符串的值。串长:串中字符的个数,例如S的串长为6。空串:零个字符的串,串长为0。子串:串中任意个连续的字符串组成的子序列,称为该串的子串,原串称为子串的主串。子串在主串中的位置,用子串的第一个字符串在主串中出现的位置表示。注意:空格也算一个字符。空格串:全部由空格组成的串为空格串。注意:空格串不是空串。字符串的存储可以使用顺序存储和链式存储两种方式。
2024-04-27 19:59:31 898
原创 详解数据结构:队列(含栈与队列扩展)
双端队列可以用两个整型变量front和rear分别指向队头和队尾,采用顺序存储。//一维数组存储,也可以设置指针动态分配空间//头指针,尾指针}DuQueue;注意:在顺序存储中,静态分配空间采用的是以为定长数组存储数据,动态分配空间是在程序运行中使用new动态分配空间。完美图解(1)前端进队时,先令Q.front前移一位,再将元素放入Q.front的位置,a、b、c依次从前端进队。(2)后端进队时,先将元素放入Q.rear的位置,再令Q.rear后移动一位,d从后端进队。
2024-04-23 11:28:14 1443 1
原创 详解数据结构:栈
栈顶元素所在的位置是S.top-1,因此把该元素取出来,暂存在变量e中,然后S.top指针向下移动一个位置。上面的结构体定义采用了动态分配的形式,也可以采用静态分配的形式,使用一个长数组存储数据元素,一个整型下标记录栈顶元素的位置。顺序栈本身是顺序存储的,有人就想:我偏要从中间取一个元素,这也是可以的,但这样做,这就不是栈了。顺序栈是分配一段连续的空间,需要两个指针:base指向栈底,top指向栈顶,而链栈每个节点的地址都不连续,只需要一个栈顶指针即可。而出栈是指删除栈顶元素,栈顶指针指向了下一个元素。
2024-04-20 12:28:36 890
原创 Python:模块和包
通常来讲,只有__all__变量列出的程序单元,才是希望该模块被外界使用的程序单元。模块就是Python程序。使用模块地好处在于:如果将程序使用的程序单元定义在模块中,后面不管哪个程序只要导入该模块,该程序即可使用该模块所包含的程序单元,这样就可以提供很好的复用——导入模块,使用模块,从而避免每个程序都需要重新定义这些程序单元。需要说明的是,并不是所有模块都是使用Python语言编写的,有些与底层交互的模块可能是用C语言编写,而且是C程序编译之后的结果,所有这种模块可能没有__file__属性。
2024-03-04 19:52:43 1197
原创 Python:类的特殊方法
在Python类中有些方法名、属性名的前后都添加了双下划线,这种方法、属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些这些方法或直接调用这些方法来实现特殊的功能。最常见的特殊方法是前面介绍的构造方法:__init__,开发者可以通过重写类中的__init__方法来实现自己的初始化逻辑。提示:Python是一门尽量简单的语言,它不像某些语言(如Java)需要让类的实现接口,并实现接口中的方法。
2024-02-27 12:11:52 1178
原创 MATLAB:数组与矩阵
MATLAB中的命令计算特征值和特征向量十分方便,可以得到不同的子结果和分解,这在线性代数学习中十分有意义。假设A是一个n×n的矩阵,A的特征值问题就是找到下面方程组的解:A·V=λ·V其中,λ为标量,V为矢量,若把矩阵A的n个特征值放在矩阵P的对角线上,相应的特征向量按照与特征值对应的顺序排列,作为矩阵V的列,则特征值问题可以改写为:A·V=V·D如果V是非奇异的,则该问题可以认为是一个特征值分解问题,此时关系式如下:A=V ·D·V-1。
2024-02-24 12:09:08 2631 1
原创 《离散数学》第三章:命题逻辑(第一部分)
注意:数理逻辑研究的中心问题是推理,而推理的前提和结论都是命题。因而命题是推理的基本 单位。定义:具有确切真值的陈述句称为命题(proposition)。该命题可以取一个“值”,称为真值。真值只有 “真”和“假”两种,分别用“T”(或“1”) 和“F”(或“0”)表示。注意:一切没有判断内容的句子,如命令句 (或祈使句)、感叹句、疑问句、二义性的陈述句等都不 能作为命题。
2024-02-20 22:26:07 1829
原创 Java 2:运算符、表达式和语句
Java提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。Java语言中的绝大多数运算符和C语言相同,基本语句如条件分支语句,循环语句等,也和C语言类似。加减运算符+、-是二目运算符,即连接两个操作元的运算符。加减运算符的结合方向是从左到右。例如2+3-8,先计算2+3,然后再将得到的结果减8.加减运算符的操作元实证性或浮点型数据,加减运算符的优先级是4级。乘除和求余运算符*、/、%是二目运算符,结合方向是从左到右,例如2*3/8,先计算2*3,然后再将得到的结果除以8。乘除和求余运算符
2024-02-17 18:09:26 932
原创 Python:异常处理
在异常处理语法结构中,只要try块是必需的,也就是说,如果没有try块,则不能有后面的except块和finally块;正如前面程序中所看到的,程序总是把对应Exception类的except块放在后面,这是为什么,在上面的异常李永成捕获流程图中,可以知道:如果把Exception类的对应的except块排在其他的except块的前面,Python解释器将直接进入该except块(因为所有的异常对象都是Exception或其子类的实例),而排在它后面的except将永远不会获得执行的机会。
2024-02-17 13:56:02 907
原创 Java第一章:基本数据类型与数组
Java的基本数据类型和C语言中的基本数据类型很相似,但也有很多不同之处,特别是float常量的格式与C语言的区别。Java语言的数组和C语言的数组有类似的地方,但也有不同的地方。用来标识类名、变量名、方法名、类型名、数组名及文件名的有效字符序列称为标识符,简单来说,标识符就是一个名字。需要特别注意的是,标识符中的字母是区分大小写的,hello和Hello是不同的标识符。Java语言使用Unicode标准字符集,该字符集由UNICODE协会管理并接受其技术上的修改,最多可以识别65536个字符。
2024-02-15 13:55:17 1010
原创 Python:类和对象
在主程序部分,主程序创建了Apple对象之后,可以访问该Apple对象的info()和taste()方法,这表明Apple对象也具有了info()和taste()方法,这就是承接的作用——子类扩展(继承)了父类,将可以继承得到父类定义的方法,这样的子类就可以复用父类的方法了。当程序涉及Canvas类的draw_pic()方法时,该方法所需的参数是非常灵活的,程序为该方法传入的参数对象只要具有制定方法就行,至于该方法呈现怎样的行为特征,则完全取决于对象本身,这大大提高了draw_pic()方法的灵活性。
2024-02-14 12:09:36 2122
原创 C++:类的继承和派生
继承是面向对象的主要特征(此外还要封装和多态)之一,它使得一个类从现有类中派生,而不必重新定义一个新类。继承的实质就是用已有的数据类型创建新的数据类型,并保存已有数据类型的特点,以旧类为基础创建新类,新类包含了旧类的数据成员和成员函数,并且可以在新类中添加新的数据成员和成员函数。旧类被称为基类或者父类,新类被称为派生类或子类。例如我们看到很多网页中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同。总结:继承的好处:可以减少重复的代码A类称为子类或派生类B类称为父类或基类。
2024-02-13 15:37:00 674
原创 MATLAB 1:基础知识
单元数组是一种无所不包的广义矩阵。组成单元数组的每一个元素称为一个单元。每一个单元可以包括一个任意数组,如数值数组、字符串数组、结构体数组或另外一个单元数组,因而每一个单元可以具有不同的尺寸和内存占用空间。注意:和一般的数值数组一样,单元数组的维数不受限制,可以是一维、二维或多维。MATLAB中使用单元数组的目的在于,它可以把不同类型的数据归到一个数组中。注意:单元数组的创建方法有两种:使用赋值语句创建单元数组和利用cell函数创建空单元数组。
2024-02-13 15:35:51 2826
原创 算法涉及与分析1:绪论
是一系列解决问题的明确指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得要求的输出。定义中使用了“指令”这个词,这意味着有人或物能够理解和执行所给的命令。我们将这种人或物称为computer。算法靠计算机实现,但算法概念本身并不依赖于这样的假设。为了阐明算法的概念,本节将以三种方法为例解决同一个问题,即计算两个整数的最大公约数。
2024-02-12 13:32:18 1476
原创 C++:面向对象——类的构造
前面已经对类的概念进行说明,可以看出类是用户自己指定的类型。如果程序中要用到类这种类型,就必须自己根据需要进行说明,或者使用别人设计好的类。下面来看一下如何设计一个类。
2024-02-12 13:32:05 895
原创 Python:函数和lambda表达式
函数实质性特定任务的一段代码,程序通过将一段代码定义成函数,并为该函数指定一个函数名,这样即可在需要的时候多次调用这段代码。因此,函数是代码复用的重要手段。与函数紧密相关的一个知识点就是lambda表达式。lambda表达式可作为表达式、函数参数或函数返回值,因此使用lambda表达式使得程序更加简洁。函数就是Python程序的重要组成单位,一个Python程序可以由多个函数组成。我们之前也用过大量的函数,如len()、max()等,使用函数是真正开始编程的第一步。比如在程序中定义了一段代码,这段代码用于实
2024-02-12 13:31:35 1242
原创 Python:流程控制
在任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下一行行地执行,中间没有任何判断和跳转。如果Python程序的多行代码之间没有任何流程控制,则程序总是从上往下依次执行,排在前面的代码先执行,排在后面的代码后执行。这意味着如果没有流程控制,Python程序的语句是一个顺序执行流,从上向下依次执行每条语句。if分支使用布尔表达式或者布尔值作为分支条件来进行分支控制。Python的uf分支既可作为语句使用,也可作为表达式使用。
2024-02-05 11:01:09 2088
原创 Python:列表、元组和字典
但方法有一个额外的功能——当程序要获取的key在字典中不存在,该方法会先为这个不存在的key设置一个默认的value,然后再返回该key对应的value。提示:此处随机其实是假的,正如列表的pop()方法总是弹出列表中的最后一个元素,实际上字典的popitem()其实也是弹出字典的最后一个key-value对。由于字典存储key-value对的顺序是不可知的,因此开发者感觉字典的popitem()方法是“随机”弹出的,但实际上字典的popitem()方法总是弹出底层存储的最后一个key-value对。
2024-02-02 12:23:31 1703
原创 C++:引用
在C++中,函数参数的传递有两种,分别是值传递和引用传递。所谓值传递,是指在函数调用时,将实际参数的值复制一份传递到调用函数中,这样如果在调用函数中修改了参数的值,也不会影响实际参数的值。而引用传递恰恰相反,如果函数按引用方式传递,在调用函数中修改了参数的值,其改变会影响到到实际参数。定义了一个引用变量ia,它是变量a的别名,对ia的操作与对a的操作完全一样。右值引用只可初始化于右值,但右值引用实际上是一个左值,它具有临时变量的数据类型。右值引用可以理解为右值的引用,当右值引用初始化后,临时变量消失。
2024-02-01 12:43:53 333
原创 Python:变量和简单类型
计算机底层并不能保存字符,但程序总是需要保存各种字符的,科学家想到一种方法:为每个字符编号,当程序要保存字符时,实际上保存的时该字符的编号;在字节串中每个数据单元都是字节,也是8位,其中4位(相当于4位二进制,最小为0,最大为15)可以用十六进制数来表示,因此每字节需要两个十六进制数来表示,所以可以看到上面输出的是:b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b',比如\xe6就表示1字节,其中\x表示十六进制,e6就是两位的十六进制数。
2024-01-29 19:36:37 1006
原创 《离散数学》第二章:计数原理
从含有n个不同的元素的集合S中有序选取的r个元素叫做S的一个r排列,不同排列的个数记为Pnr称为排列数,如果r=n,则称这个排列为S的一个全排列,简称为S的排列。,Xi均为集合,第i个集合Xi中有ni个元素,若{X1,X2,…设A,B和C是任意三个有限集合,有|A∪B∪C|=(|A|+|B|+|C|)-(|A∩B|)-(|A∩C|)-(|C∩B|)+|A∩B∩C|假设每个鸽笼至多住进一个鸽子,则n个鸽笼至多住进n只鸽子,这与有n+1只鸽子矛盾,故存在一个鸽笼至少住进2只鸽子。设U为全集,A1,A2,…
2024-01-17 12:20:10 1167
原创 C语言常用库函数
C语言标准库函数由15个头文件组成。数学计算是计算机最擅长的运算,计算机大部分运算方法都是基于数学计算执行的。C语言提供了很多用于数学计算的库函数,合理利用这些库函数,将对程序的编写和运行起到事半功倍的作用。要使用这些函数,在程序文件头必须加入头文件包含#include。
2024-01-10 21:41:44 3254 1
原创 《数据结构》第五章:递归
(Generalized List)一般记作其中,α1既可以是不再细分的元素,也是广义表,分别称为广义表L的原子和子表。
2024-01-10 13:28:31 1072
原创 《数据结构》第四章:哈希表
假设8个关键字22,41,53,,46,30,13,12,67,哈希表的地址区间长度为11,哈希函数为H(key)= (3*key)%11,若需要删除关键字为30的记录,计算得到的哈希地址为2,该单元的值为41,不是30;先取关键字的平方,然后根据哈希表地址区间长度m的大小,选取平方数的中间若干位作为哈希地址。还是上面8个关键字22,41,53,,46,30,13,12,67,哈希表的地址长度为11,哈希函数仍为H(key)= (3*key)%11,但采用二次探测法处理冲突,可求得各关键字的哈希地址.
2023-12-09 21:26:57 1381
原创 《数据结构》第三章:排序基础
count[i]是对值i的计数,pos[i]是值为i的子序列的起始位置。先按最主位关键字k0进行排序,得到若干子序列,其中每个子序列中的记录都含相同的k0值,之后分别对每个子序列按关键字k1进行排序,致使k1值相同的记录构成长度更短的子序列,依次重复,直到对每个子序列按km-1从小到大排序,最后由这些子序列依次相连所得序列便是排序的最后结果。例如,一组关键字(337,332,132,267,262,164,260,167)的8个记录序列进行低位优先的计数基数排序,需要三趟“分配”和“收集”。
2023-12-06 17:20:05 1142 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人