- 博客(70)
- 收藏
- 关注
原创 深度学习之梯度消失
在深度学习中,梯度消失是指在反向传播过程中,随着网络层数增加或者在使用特定类型的激活函数(如sigmoid函数)时,梯度逐渐变小并最终趋近于零的现象。这种现象导致在更新参数时,底层网络的权重几乎不会得到有效的更新,从而使得网络在学习过程中变得非常缓慢甚至停滞不前。
2024-07-10 08:17:14
262
1
原创 循环神经网络(RNN)
当我们需要data1训练的结果要结合data0的的时候,我们就可以将data0训练的得到的记忆加入data1训练后得到的记忆,然后输入得到Result1。想象你在阅读一本小说,每读到一个词,你的理解会受前面词的影响。RNN的工作方式类似:它会记住前面看到的内容,并根据这个记忆来理解当前的输入。每个时间步,它接收当前的输入向量和上一个时间步的隐藏状态(即记忆),并输出一个新的隐藏状态。总之,RNN通过其循环结构可以利用先前的信息来影响当前输出,因此非常适合那些依赖于序列顺序和历史信息的问题。
2024-07-06 12:28:29
384
原创 卷积神经网络(CNN)
其作用有减少数据量,强化特征的效果。3、权重连接:全连接层将这些特征向量与神经元进行“全连接”。全连接层的主要功能是对卷积层提取的特征进行整合与分类,最后得出预测结果。4、非线性变换:每个神经元接到上层的特征向量输入后,会进行非线性变换。卷积层的第一层的卷积核,只有9个像素点。2、展开特征:将二维或三维的特征图“展开”,展开成一维的特征向量。以此类推,卷积层的层数越多,卷积核可以获取的特征就越丰富。也就是图像移动、旋转和光线亮度不一,图像的特征还是一样。卷积层的第二层的卷积核,有(9。
2024-07-04 23:26:46
187
原创 激活函数、向前传播、损失函数、梯度下降
输出层将隐藏层的输出作为输入。然后传递给激活函数,激活函数将数据映射成非线性的。将预测结果放入损失函数,计算损失值。向前传播描述了,神经网络中,输入层到输出层的信号传播和处理过程。输入层将特征数据输入,加权求和,然后通过激活函数引入非线性,然后得到输出。作用:主要引入了非线性。损失函数就是计算预测值与实际值之间的差距。隐藏层的输入就是输入层的输入。隐藏层经过多层传递,最后到输出层。Hinge loss:衡量分类边界与正确分类间隔的差异。3、小批量梯度下降:较准确,效率高。2、随机梯度下降:不准确,效率高。
2024-07-03 23:08:26
328
原创 感知机总结
因为感知机只能实现线性分类,而做不到非线性分类,连异或问题也解决不了。神经网络通过多层感知机来解决这个问题。是一种简单的二分类的模型。单层感知机可以实现线性分类,无法做到非线性分类。分类流程:输入特征 --》学习规则(权重和偏置)–》决策(分类)–》调整错误(分类错误,调整权重和偏置)也就是神经网络除了输入、输出之外。还有多了一个隐藏层。神经网络引入了卷积神经和池化,通过提取空间特征并减少参数,有效地处理视觉任务。感知机有几部分组成:输入变量、偏置、求和函数,激活函数,输出。神经网络引入了更多的激活函数。
2024-07-02 22:03:47
268
原创 梯度下降算法总结
总的来说,梯度下降的步骤就是不断地计算梯度、更新参数,并重复这个过程直到达到停止条件。这样就可以逐步优化目标函数,找到其局部最小值或全局最小值。但是我们直接求解不一定能算出θ。所以我们用到这种慢慢逼近这个最优解,求最优解。我们知道线性回归其实其本质就是求θ。1、我们为什么要用梯度下降算法。
2024-05-23 07:47:07
165
原创 机器学习中线性回归算法的推导过程
线性:因变量(通常是我们想要预测的变量)与自变量之间的关系可以用一个线性方程来描述。回归:建立一个模型,该模型能够描述因变量与自变量之间的关系,并且可以用来预测因变量的数值。
2024-05-05 22:39:09
504
原创 transformer中,多头注意力机制
多头注意力机制之所以在自注意力机制中使用,是因为自注意力机制需要在序列中建立全局的依赖关系,而多头注意力机制能够帮助模型捕捉到不同位置之间的不同关系,从而更好地理解输入序列的结构和语义信息。具体来说,自注意力机制通过计算每个位置与序列中所有其他位置的注意力权重,然后将这些权重与相应位置的表示进行加权求和,从而生成每个位置的上下文相关表示。而多头注意力机制则在自注意力机制中并行计算多个注意力头的输出,然后将它们连接起来,最后经过线性变换得到最终的输出。
2024-04-23 22:44:19
274
原创 transformer中,{tensor:(16,3,244,244)} 的含义
在计算机视觉中,通常使用RGB(红、绿、蓝)颜色通道来表示图像,所以这个维度表示每个样本具有 3 个颜色通道。因此,这个Tensor表示了一个包含 16 个图像样本的数据集,每个图像样本具有 3 个通道(RGB),并且每个图像的尺寸为 244x244 像素。这个Tensor的形状是 (16, 3, 244, 244),它表示了一个四维的张量。第三个维度height(244):表示每个样本的高度为 244 像素。这个维度表示图像的高度。第四个维度width(244):表示每个样本的宽度为 244 像素。
2024-04-22 22:09:49
222
原创 卷积层、池化层和全连接层的作用分别是什么
总的来说,卷积层用于特征提取和参数共享,池化层用于降采样和特征压缩,全连接层用于特征组合和分类预测。这三种层类型共同构成了深度学习模型中重要的组成部分,各自发挥着关键的作用,帮助神经网络学习并表达复杂的数据模式。
2024-04-21 20:46:04
807
原创 联为机器视觉的课程笔记
用到的算子包括affine_trans_image(仿射图像)、affine_trans_region(仿射区域)、极坐标与笛卡尔坐标互转 polar_trans_region, polar_trans_region_inv。用到的算子包括hom_mat2d_translate(平移)、hom_mat2d_rotate(旋转)、4)创建具有缩放比的模板 create_scaled_shape_model。8)获取模板的位置 get_shape_model_region。
2024-04-14 13:52:37
738
原创 python中,深拷贝和浅拷贝的区别
浅拷贝是创建一个新的对象,该对象具有与原始对象相同的内容。但是,如果原始对象包含其他对象(如列表、字典等),浅拷贝仅复制对象的引用,而不是创建新的对象。这意味着修改原始对象中的嵌套对象将会影响到浅拷贝的对象。深拷贝是创建一个全新的对象,其中包含原始对象及其所有嵌套对象的副本。换句话说,深拷贝不仅复制了原始对象的值,还复制了原始对象的所有嵌套对象。我们修改了原始对象中的嵌套列表,然后分别打印了原始对象、浅拷贝对象和深拷贝对象。可以看到,浅拷贝对象的嵌套列表也被修改了,而深拷贝对象的嵌套列表保持不变。
2024-01-07 19:15:14
429
原创 Qt中,信号与槽的原理及观察者模式的应用
连接可以通过QObject的connect()函数来创建,该函数接收信号源对象、信号的名称、槽函数的目标对象和槽函数的名称作为参数。通过将信号与槽函数进行连接,当信号被发射时,与之连接的槽函数将被调用。一个对象可以发射多个信号,多个对象可以连接到同一个信号上,一个对象可以连接多个槽函数,甚至还可以在不同线程中进行信号与槽之间的通信。在该模式中,当一个对象的状态发生变化时,它会自动通知所有依赖于它的其他对象,使它们能够及时作出相应的响应。它基于观察者模式,通过发射信号和连接槽函数来实现对象之间的通信。
2024-01-07 17:17:28
1896
原创 C++11,移动语义
首先,对于可移动的对象,应该实现移动构造函数和移动赋值运算符,并将资源的所有权正确地转移。通过使用std::move,我们可以将一个对象的资源有效地转移到另一个对象中,而不需要进行昂贵的拷贝操作。使用移动构造函数和移动赋值运算符,我们可以在不进行不必要的资源拷贝的情况下,高效地转移资源,并使代码更加简洁和高效。总之,移动语义是C++11引入的一个重要特性,它通过引入右值引用和移动构造函数/移动赋值运算符,提高了对象的移动效率和资源的利用率,从而使程序更加高效和性能更好。它是实现移动语义的重要工具之一。
2024-01-07 17:03:37
503
原创 C++中,Lambda表达式和std::function的作用及区别
std::function的作用是提供一个通用的函数对象包装器,可以用于存储和调用任何可调用对象,包括函数指针、函数对象和Lambda表达式。std::function提供了一种统一的接口来处理不同类型的函数对象,使得它们可以像普通函数一样进行调用。综上所述,Lambda表达式和std::function在功能和使用上有所差异,根据具体的需求可以选择合适的方式来处理函数对象。Lambda表达式适用于临时定义的简短函数逻辑,而std::function适用于需要存储和传递不同类型函数对象的场景。
2024-01-06 13:07:28
900
原创 C++,智能指针详解(面试)
智能指针的使用可以帮助我们更方便地管理动态分配的内存资源,避免了手动释放内存的繁琐工作,减少了内存泄漏和悬空指针的风险。C++中的智能指针是一种用于管理动态分配的内存资源的指针类模板。它们提供了自动内存管理,帮助避免内存泄漏和悬空指针的问题,同时减少了手动释放内存的负担。根据具体的需求和场景,选择适当的智能指针可以提高代码的性能和可维护性。会增加对象的引用计数,导致对象在容器中的生命周期得不到正确管理,从而可能导致内存泄漏。这样,在引用计数归零时,对象会被正确释放,避免内存泄漏。,以解除循环引用关系。
2024-01-06 12:53:38
1303
原创 Qt的三大机制(面试)
这些核心机制共同构成了Qt框架的基础,使开发者能够更加方便、高效地开发跨平台的应用程序。Qt三大核心机制是信号与槽机制、事件机制和对象模型。
2024-01-03 11:25:52
1134
原创 位运算总结
当我们需要在二进制级别上进行操作时,位运算非常有用。C++提供了几种位运算操作符,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)和左移(<<)和右移(>>)。这些是位运算的基本使用示例。请注意,位运算通常在处理底层数据表示和优化代码时使用,对于一般的应用程序开发可能不常用。
2024-01-03 10:57:44
313
原创 类外访问类内私有虚函数的方法
使用友元函数:可以将一个函数声明为类的友元函数,从而使其能够访问类的私有成员和私有虚函数。在友元函数中,可以直接调用类的私有虚函数。请注意,这些方法都是通过间接访问来实现对私有虚函数的调用,以维护类的封装性和数据安全性。在C++中,类的私有成员和私有虚函数是不能直接从类外访问的。这是因为私有成员和私有虚函数被设计为仅供类内部使用,以提供封装性和数据安全性。使用公有接口函数:可以在类中定义公有函数,来间接实现对私有虚函数的访问。这些公有函数可以调用私有虚函数,然后在类外部调用公有函数即可。
2024-01-03 10:56:07
443
原创 C++中,左值引用和右值引用的区别
在上面的示例中,左值引用主要用于引用可取地址的表达式(如变量),而右值引用主要用于引用临时值和不可取地址的表达式。左值引用(lvalue reference)和右值引用(rvalue reference)是引用的两种类型。请注意,C++11引入了右值引用,并且在C++11之前的版本中,只有左值引用是可用的。当谈到左值引用和右值引用的区别时,以下是一些示例代码来说明它们之间的差异。只能引用左值(可以取地址的表达式,如变量、函数返回的左值等)这些示例旨在帮助理解左值引用和右值引用的概念和用法。
2024-01-02 21:00:21
414
原创 MFC或QT中,自绘控件的目的和实现步骤
自绘控件的目的是为了能够自定义控件的外观、行为和交互方式,以满足特定的需求,同时增强应用程序的用户体验。在QT中,自绘控件的目的是为了能够自定义控件的外观和行为,以满足特定的需求,并增强应用程序的用户体验。5、可以监听控件的鼠标事件(如鼠标移动、点击等),根据需要改变控件的状态以及绘制方式。4、可以根据控件的状态(如鼠标悬停、按下等)选择合适的绘制方式,以改变控件的外观。4、可以根据控件的状态(如鼠标悬停、按下等)选择合适的绘制方式,以改变控件的外观。6、可以添加自定义属性,以控制控件的行为和交互方式。
2023-12-25 19:48:07
969
2
原创 QT中,socket通讯要考虑哪些问题?(面试题)
在Qt中进行Socket通信时,需要考虑以下几个问题:连接建立和断开:确保在客户端和服务器端之间能够正确地建立和断开连接,以便进行正常的数据传输。数据传输格式:确定数据传输的格式,包括数据的编码方式、数据包的大小、传输协议等。根据需求选择合适的传输协议,如TCP或UDP,以及合适的数据编码方式,如JSON或XML。数据完整性和可靠性:确保数据的完整性和可靠性,避免数据丢失或损坏。可以通过使用TCP协议来确保数据的可靠性,或者使用校验和等机制来验证数据的完整性。
2023-12-25 19:35:48
802
原创 C++中,四种数据类型转换
这些示例展示了每种类型转换的基本用法。请注意,reinterpret_cast 的使用需要格外小心,因为它执行了一种低级别的类型 reinterpretation,可能会导致未定义行为或系统相关的问题。在实际编程中,应保持谨慎,根据实际需要选择合适的类型转换方式。在 C++ 中,有四种类型转换方式,分别是 static_cast、dynamic_cast、const_cast 和 reinterpret_cast。
2023-12-20 21:59:47
401
原创 设计模式:观察者模式
在这个情况下,电视剧就是“主题”或“发布者”,而你就是一个“观察者”或“订阅者”。每当主题的状态发生变化时,所有的观察者都会得到通知,并且可以据此进行适当的反应。对象(或部件)可以发出信号(当特定事件发生时),其他对象可以监听(或订阅)这个信号,然后定义槽函数(或回调函数)来响应这个信号,从而实现彼此的解耦合。在此例中,NewsPublisher是"主题",NewsSubscriber是"观察者"。观察者模式就像一个新闻订阅服务。在这个例子中,新闻网站是"发布者"或"主题",而你是"订阅者"或"观察者"。
2023-11-27 09:35:02
327
原创 VS中如何使用Halcon
使用Halcon的本质就是调用Halcon的库,其主要步骤有:1、将Halcon代码导出为C++的.cpp文件2、获取.cpp文件中的action函数的函数体3、添加Halcon的动态库和静态库4、添加action函数需要的头文件。
2023-11-25 17:53:27
523
原创 lambda表达式基础
在这个示例中,我们定义了一个Lambda表达式 sum,它捕获了外部作用域中的变量 a 和 b,并返回它们的和。Lambda表达式的灵活性和简洁性使得它成为C++中一个非常有用的特性,特别是在需要传递函数作为参数或在需要定义小型函数时。在C++中,Lambda表达式是一种用于定义匿名函数的特性,它允许你在需要函数的地方直接定义函数,而无需显式声明一个命名函数。parameter list 是Lambda函数的参数列表,类似于普通函数的参数列表。{} 内是Lambda函数的函数体,包含了函数的具体逻辑。
2023-11-22 10:47:12
64
原创 Linux中,GDB调试的常用命令
例如,如果你有一个名为 test 的程序,你可以输入 gdb test 来启动 GDB 并加载 test 程序。例如,你可以输入 watch i 来监视变量 i 的值,当其值发生改变时,程序将会暂停执行。例如,如果你想查看函数调用堆栈,你可以输入 backtrace 或 bt。例如,如果你想将变量 i 的值设为 10,你可以输入 set var i=10。next 或 n:执行下一行代码。例如,如果你想执行下一行代码,你可以输入 next 或 n。例如,如果你想退出 GDB,你可以输入 quit 或 q。
2023-11-16 16:23:50
106
原创 VS打开Qt Designer(UI文件.ui)失败的解决方法
VS打开Qt Designer失败的根本原因:VS中默认的Qt Designer路径是错误的。所以要正常使用需要重新设置。1、设置VS中打开Designer的路径。
2023-11-14 20:34:47
1716
原创 QT的软件国际化(使用VS)
c)添加完成,添加完成后会自动生成.pm文件。前提:对程序中需要翻译的字符进行tr包裹。2、第二点 对当前显示的语音记录并设置。1、第一点 添加文件(翻译文件)b)通过语言家的文件,打开翻译文件。c)翻译后保存,最后发布。
2023-11-07 10:18:36
239
原创 MFC中,定时器的使用
当使用SetTimer函数创建一个定时器并启动后,当定时器触发时,系统会发送WM_TIMER消息给窗口,然后MFC框架会调用该窗口类的OnTimer函数来处理这个消息。在OnTimer函数中,可以根据nIDEvent参数的值来判断是哪个定时器触发了,然后执行相应的操作。在调用SetTimer函数后,系统将会在指定的间隔时间过后,触发一个定时器事件,并调用指定的回调函数。lpTimerFunc:是一个定时器回调函数的指针,用于在定时器触发时执行特定的操作。可以是一个回调函数的地址,也可以是一个函数指针。
2023-10-10 21:48:33
1064
原创 雷赛运动卡的两种输出方式的简单介绍
无论是单路脉冲输出还是双路脉冲输出,它们都是用来告诉电机要移动到哪个位置。具体的位置指令可以通过软件或者其他输入设备发送给 DMC1000/DMC1000B 运动控制卡,然后控制卡将相应的脉冲信号发送给电机,从而实现准确的位置控制。一个脉冲信号用来控制电机的顺时针(CW)运动,另一个脉冲信号用来控制电机的逆时针(CCW)运动。第一种方式是单路脉冲(脉冲+方向)输出。在这种方式下,位置指令通过一个脉冲信号和一个方向信号传输。脉冲信号用来控制电机的步进或运动距离,方向信号用来指示电机是正向运动还是反向运动。
2023-10-10 10:04:12
450
原创 QT引入图片资源
7、选择需要的照片,注意这里放图片的文件夹最好在项目文件夹内。3、选择QT --> Qt Resource File;2、右键项目,点击add new。4、自己取个名字,路径不用改。5、点击ADD prefix。8、点击右上角x,并确认保存。6、点击add files。1、将图片放入一个文件夹。
2023-10-06 20:08:10
1626
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人