- 博客(137)
- 收藏
- 关注
原创 LangChain常用知识点学习总结
知识点:链是一种将多个语言模型组件或工具链连接在一起的结构,用于执行特定的任务流程。每个链都有一个明确的输入和输出,并且可以由多个子链或组件组成,形成一个处理通道。常见类型为LLMChain、RetrievalQA、ConversationChain。提升词是与语言模型交互的关键、它能引导模型生成符合预期的输出。4、代理(Agents)5、记忆(Memory)3、链(chain)
2025-02-08 09:22:03
179
原创 梯度下降算法的计算过程
1 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)1.1划分数据集为多个小批量。1.2前向传播:对于每个小批量中的所有样本进行一次前向传播,得到预测输出。1.3计算损失:然后计算这些预测输出相对于真实标签的总损失。通常是累加每个样本的损失来完成。1.4反向传播:执行反向传播以计算当前小批量上损失函数关于模型参数的梯度,这是通过自动微分工具自动完成,它会为每一个参数计算出一个梯度值。1.5计算平均梯度前向传播:对于一个给定的小批量(mini-batch),
2025-01-14 15:16:27
728
原创 目标检测常用评估指标(metrics)
Faster R-CNN、SSD、YOLO等算法在训练阶段的正负样本的划分有各自的细节,但在最终测试和验证阶段评估精准率和召回率时,流程和算法本质上是一致的:对网络输出的所有预测框做阈值过滤和NMS,然后与标注框做IOU比较。统计TP、FP和FN。4、目标检测任务的真正例、假正例、假负例如何划分。5、论文是如何计算相关指标的。6、目标检测的3个阈值。
2024-12-23 11:18:31
1031
原创 RCNN系列是如何逐步改善的
1、R-CNN的缺点:1)计算效率低下:RCNN需要为每一个候选框都提取特征,会导致大量重复的工作,因为候选框是原始图片的一部分,肯定是存在交集的。2)需要大量的磁盘空间:在训练阶段,RCNN会将所有 提起到的特征都存储在磁盘上。3)检测速度慢:使用selective search生成候选区域+候选区域特征提取。2、SPPNet是如何解决的SPPNet(Spatial Pyramid Pooling Network)引入了空间金字塔池化。它可以在任意大小的输入图像上工作,并且对一张输入图
2024-12-20 11:02:38
262
原创 RuntimeError: DataLoader worker (pid XXX) is killed by signal: Bus error
【代码】RuntimeError: DataLoader worker (pid XXX) is killed by signal: Bus error。
2024-12-18 10:59:39
642
原创 Yolo-v2
网络输出:1)yoloV1输出的张量是2个bbox的坐标信号(x, y, w, h, c)以及分类的概率。2)yoloV2输出的张量是每个网格单元对应有5个anchor,每个anchor对应付4个位置信息、1个置信度和分类概率的概率分布。
2024-11-29 15:52:42
652
原创 Yolo-v1
训练的过程:将图像分为SxS个网格区域,人工标注的ground truth的中心点落在哪个网格,就由哪个网格负责预测该框。更具体的,每个网格只负责预测一类物体,且一个网格会产生B个bounding box框,其中与人工标注的ground truth的IOU最大的那个框负责预测标注框。3)负责预测的bounding box的confidence误差:其中C表示置信度,根据上述公式,置信度等于网格包含对象的概率*与bbox与标注框的iou。5)负责检测物体的网格的分类误差。2)卷积神经 网络进行回归。
2024-11-26 15:23:30
256
原创 Faster R-CNN
1)之前的R-CNN、Fast R-CNN、SPP- Net的候选框生成都是使用slect search生成的,但这个算法太慢了,处理一张图片需要两秒。
2024-11-26 14:52:52
202
原创 Datagrip连接虚拟机数据库报错:[08S01] Communications link failure
问题描述:使用Datagrip连虚拟机上的数据库报错:[08S01] Communications link failure解决方法:修改Advanced中的useSSL,改为false。
2022-05-21 10:05:39
1388
原创 mybatis报错:Invalid bound statement (not found)
1.问题描述:项目中mybatis一直报错绑定错误,出现这种情况一般都是mapper.xml文件写错了,命名空间不对等问题。2.问题原因:经排查,是mybatis配置文件错误导致的。刚开始是将mapper.xml文件和mapper文件放一起的,配置文件写的是mapper-locations: classpath:com/xing/mapper/xml/*.xml。后来将xml文件移到了resource目录下,忘记修改配置文件。3.解决方法:要么将没扫描到的xml文件移到resource目录下的map
2022-05-19 10:11:02
3142
原创 springboot报错:class path resource cannot be opened because it does not exits
问题描述:springboot报错:在使用@PropertySource注解读取properties文件时,报错:class path resource cannot be opened because it does not exits。问题原因:发现prpperties不是绿色的小叶子。解决方法:1. 先将resources目录标记为resources目录。2.然后添加properties文件。...
2022-04-27 20:16:55
10610
2
原创 优先队列总结
优先队列在插入元素的时候,自动将其插入到合适的位置,实现动态的调整,底层是堆。创建优先队列时,可自己实现comparator接口的compare方法,用于队列中的元素排列规则。在使用优先队列时,有时候需要配合排序数组使用,也可以为Arrasy.sort()方法传入一个comparator接口的匿名内部类或lamda表达式,自定义数组排序规则。力扣630. 课程表 III思路:贪心+优先队列。每次选择一个截至时间最早的课程,判断该课程的持续时间与之前课程的持续时间之和是否超过了该课程的截至时间,如果没超过
2022-04-08 11:23:01
464
原创 java char与int互转
1.char转int,直接减去’0’2.int 转char,加上+'0’再强转为charint a = (char)(c + '0')
2022-03-08 16:47:35
440
原创 关于二分查找
1.while(left < right)和while(left <= right)的区别:<的终止条件是[right, right],<=的终止条件是[right+1, right+1].2.当mid = left + (right - left ) / 2时候,如果mid不满足target的条件,left和right要加1:left+1, right+1。如果使用二分查找寻找边界时,left不加1,right加1,应该mid=left + (right - left + 1)
2022-03-05 20:35:09
395
原创 剑指 Offer 56 - I. 数组中数字出现的次数
思路:题目规定时间复杂度为0(n),所以不能使用哈希表,暴力方法。利用异或,二进制位相同位0,不同为1.如果只有一个数字出现一次,则只需要将所有 数字进行异或运算,最后的结果即为该数字,因为出现两次的数字因异或运算两两抵消了。因此,需要将原数字进行分成2组,这两个数字各在一组,相同的数字在一组。具体实现为:先将所有数字进行异或得到res,按res的二进制位为1进行分组,数字的该二进制位为1,在一组,为0在另一组。然后在组内各进行一次异或,即得到结果。代码:class Solution { pub
2022-03-04 11:18:16
134
原创 剑指 Offer 48. 最长不含重复字符的子字符串
1.思路:使用动态规划+哈希表。设s[j]为字符串下标j的元素,s[i]为s[j]左边最近的,与s[j]相同的元素,d[j - 1]表示以s[j - 1]结尾的不含重复子串的最大长度。此时分三种情况:1)d[j - 1] > j - i,此时i位于d[j - 1]区间内b c d a e f g a, s[j] = a, s[j - 1] = g2)d[j - 1] = j - i,此时i位于d[j - 1]区间内,是d[j - 1]区间的最左元素。b a d g e f b a, s[j]
2022-03-04 10:31:20
328
原创 剑指 Offer 47. 礼物的最大价值
思路:使用动态规划,dp[i][j]表示从起点到{i, j}的累计最大礼物价值。所以可以写出状态转移方程:p[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];代码:class Solution { public int maxValue(int[][] grid) { int rows = grid.length; int cols = grid[0].length; int[][] dp
2022-03-02 20:53:21
94
原创 剑指 Offer 46. 把数字翻译成字符串
方法1.动态规划思路: //类似青蛙跳台阶的思想,要求前i位的翻译数,第i位可以单独作为一位,此时,前i位的翻译数与前i-1位数的翻译数一致,第i位也可与i-1位组成一个2位数进行翻译,如果可以组合,则前i位的翻译数与前i-2位的翻译数一样,因为后面两位固定只有一种翻译方式如果不可以组合,则这种方式为0种。代码:// class Solution {// public int translateNum(int num) {// String s = String.value
2022-03-02 19:36:02
131
原创 HTTP 长连接短连接使用场景是什么
HTTP1.1之前默认使用的是非持久连接,HTTP1.1之后使用的是默认使用持久连接。只要客户端和服务器都设置Connection为keep-alive,就是使用长连接。实际上,是使用TCP长连接,因为http是应用层协议,要tcp是传输层协议,肯定是再客户端和服务器通过三次握手建立tcp连接,才能传输信息。为什么博客园这种用户少的网页也使用长连接,使用长连接不是为了减少频繁的tcp开销吗?事实上,使用长连接的一个好处是可以复用tcp连接,即便是访问客户端较少的博客园,诸如js等文件也需要建立tcp连接,
2022-03-01 22:00:19
1270
原创 剑指 Offer 42. 连续子数组的最大和
1.思路: 使用动态规划,dp[i]表示nums[i]结尾的最大连续数组和,也就是前i个元素的最大连续和是取前i个加上当前元素呢还是,抛弃前i - 1个,从当前元素开始。需要维护一个额外的MaxSum保存中的的子数组的最大和dp[num.length - 1]不是最大和,他代表的仅仅的(dp[nums.length - 2] + nums[length - 1], nums[nums.length - 1])两者的最大值2.代码:class Solution { public int maxSu
2022-03-01 19:34:13
649
原创 剑指 Offer 39. 数组中出现次数超过一半的数字
方法1:排序思路:先排序,然后返回arr[arr.length / 2]代码:排序class Solution { public int majorityElement(int[] nums) { quickSort(nums, 0, nums.length - 1); return(nums[nums.length / 2]); } public static void quickSort(int[] arr, int start, int
2022-03-01 17:12:48
175
原创 剑指 Offer 31. 栈的压入、弹出序列
1.思路:使用一个辅助辅助栈,对于pushed中的元素,每次将一个元素入栈,然后栈顶元素和出栈顺序的元素相比,如果相同,则将元素出栈,也就是用在辅助栈上模拟入栈和出栈顺序,最后栈为空,则说明出栈顺序是可行的,否则不行。2代码:class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack<Integer> Stack = new Stack();
2022-03-01 14:50:51
127
原创 算法中常见各种判断条件
1.数组:matrix == null || matrix.length == 0 || matrix[0].length == 0;2.栈:while(!stack.isEmpty())3.队列:队列为空:rear == front, 队满:(rear + 1) % queaSize = front;4.双指针: while(l < r)
2022-03-01 14:28:02
245
原创 剑指 Offer 30. 包含min函数的栈
1.思路:设置两个栈A和B,A存储所有元素,B存储的是小于等于A入栈的第一个元素,且按非递增顺序排列,这就保证了B的栈顶元素是最小元素2.代码:class MinStack { Stack<Integer>A; Stack<Integer>B; /** initialize your data structure here. */ public MinStack() { A = new Stack(); B =
2022-03-01 11:39:37
85
原创 剑指 Offer 29. 顺时针打印矩阵
1.思路:模拟顺时针打印的过程,从{0, 0}开始。遍历矩阵,最开始是向右,当row或者col超过下标或者元素已经被访问,则改变访问的方向。2.代码:class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix == null || matrix.length == 0 || matrix[0].length == 0)return new int[0]; //模拟顺时针打印矩阵
2022-03-01 10:27:59
96
原创 剑指 Offer 49. 丑数
1.思路://用dp[i]标识第i个丑数,根据丑数的定义,若当前已得到dp[i - 1],则dp[i]只能等于dp[a] * 2, dp[b] * 3, dp[c] * 5中的最小者,a, b,c未知//其中dp[a]是首个乘以2大于dp[i-1],dp[b]是首个乘以3大于dp[i-1],dp[c]是首个乘以5大于dp[i-1]的丑数2.代码:class Solution { public int nthUglyNumber(int n) {//用dp[i]标识第i个丑数,根据丑数的定义
2022-02-25 16:04:04
167
原创 【无标题】
1.思路:使用快速幂,将x的a次方的值数a转换为2进制的形式,即x ^ a = x^ (1 * b1) * x^ (2 * b2) * x^ (4 * b3) * …,bi为0或者12.代码:class Solution { public double myPow(double x, int n) { if(n == 0) return 1; double res = 1.0; //当n为负数时,例如2的-3,做法是将2变为小数,-3变为正3,由于
2022-02-22 17:05:48
98
原创 剑指 Offer 15- 二进制中1的个数
1.思路:方法1是利用求整数的二进制的方法,每次加上n %2,再将n / 2。直到n == 0;疑惑的地方在于java通不过部分测试案例,c++则可以。方法2是利用与运算逐个比较n的每个二进制位,为1则count++;2.代码://编译不通过,c++可以// public class Solution {// // you need to treat n as an unsigned value// public int hammingWeight(int n) {//
2022-02-22 15:14:33
411
原创 剑指Offer14-II-剪绳子
1.思路:本题是在I的基础上做了限定,要求结果求余,所以不能再用动态规划。根据数学证明,绳子剪成多短,每段为3时乘积最大。设n 为绳子长度,n = x * a + b,即将绳子剪为a段,每段x长,余b。b可取0, 1, 2。需要注意的是,b为1时,可以和一个3凑成2 和2,这样乘机会更大。2.代码:class Solution { public int cuttingRope(int n) { if(n < 4) return n - 1; long res
2022-02-22 14:10:14
71
原创 剑指Offer14-剪绳子
1.思路:使用动态规划,dp[i]表示长度为i的绳子可以剪的最长长度,动态转移方程为dp[i] = max(dp[i], max(j * i, j * dp[i - j]))。2.代码:class Solution { public int cuttingRope(int n) { //dp[i]表示长度为i剪成m段的最长长度 int[] dp = new int[n + 1]; //长度为2剪成2段 dp[2] = 1;
2022-02-22 12:48:53
385
原创 剑指offer13-机器人的运动范围
1.思路:使用广度优先遍历,使用队列存储元素,将当前元素出队,依次访问该元素的周边元素,如果符合条件则记作以访问,并将其入队,总数加1,从而实现广度优先。当队列为空时,则结束访问,返回总数。2.代码:class Solution { public int movingCount(int m, int n, int k) { if(k == 0)return 1; //标记当前格子是否访问过,访问过为1 int[][] vis = new int[m]
2022-02-21 18:07:31
209
原创 冒泡排序,选择排序,堆排序,快速排序学习心得
常用排序算法中复杂度为o(n2),o(n log(n)),冒泡和选择为o(n2),堆排序和快速排序为o(n log(n))。1.冒泡排序主要思路:每一趟从第一个数开始,两两比较,如果nums[i] > nums[i + 1],则将两数交换,共比较nums.length - 1趟数。改进版是某一趟没有发生交换,则停止。代码易错点。 boolean swaped = true; for(int i = 0; i < nums.length - 1; i++){ //如果
2022-02-18 18:55:28
604
原创 LeetCode430-扁平化多级双向链表
思路:用dfs实现扁平化当前节点的child,并返回扁平化的最后一个节点childLast。如果next不为空,则将next链接在childLast后面。代码:class Solution { public Node flatten(Node head) { dfs(head); return head; } //dfs用于扁平化当前节点作为head的链表,并返回扁平化后的最后一个节点 public Node dfs(Node head)
2021-12-13 15:03:43
615
原创 LeetCode328-奇偶链表
思路:思路很简单,将原链表中的奇节点两两连起来,偶数节点两两连起来,再将偶数链表链在奇数链表后边。代码://思路就是拿掉原链表中的偶数节点,链起来,然后将偶数节点的头连在最后一个奇数节点后面。class Solution { public ListNode oddEvenList(ListNode head) { if(head == null) return null; //分别指向奇数节点,偶数节点,偶数节点头 ListNode odd =
2021-12-07 20:01:49
667
原创 LeetCode
思路:思路很简单。cur指向前一个节点,cur指向当前节点,利用pre删除当前与val相同值的节点。代码:class Solution { public ListNode removeElements(ListNode head, int val) { ListNode dummyNode = new ListNode(0, head); ListNode pre = dummyNode, cur = pre.next; while (cur !=
2021-12-07 14:53:18
2889
原创 LeetCode92-反转链表Ⅱ
思路:思路简单,截断中间链表,反转再拼接。代码:class Solution { public ListNode reverseBetween(ListNode head, int left, int right) { //思路很简单,反转中间部分,再拼接起来。 //为了省去奇奇怪怪的错误,创建一个头节点,避免节点个数太少导致null.next.next ListNode dummyNode = new ListNode(0, head);
2021-12-06 20:56:21
436
原创 LeetCode1816-截断句子
方法1:1.思路:最开始想到的是对字符串分割,创建一个空串,将前k个单词拼接起来。2.代码:class Solution { public String truncateSentence(String s, int k) { String[] str = s.split(" "); String res = ""; for (int i = 0; i < k; i++){ if(i == k- 1){
2021-12-06 14:56:13
105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人