- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 数学建模——模拟退火
随机找一个初始点,在初始点附近找一个新点,对应函数值为,如果新函数值大于旧函数值,则接受点,如果新函数值小于旧函数值,则以接受,新旧函数值相差越小,则概率越大。搜索前期搜索范围应该尽可能大,搜索后期倾向于局部搜索。概率可以定义为:Ct可以看做随时间变化,前期Ct较小,搜索的范围也就大,后期Ct大,精准搜索。流程:根据退火的理论,将Ct取为温度的倒数:温度一定时,越小,概率越大,即目标函数相差越小接受的可能性越大。一定时,温度越高,概率越大,即搜索前期温度较高,更有可能接受新解。...
2022-08-03 18:12:32
3579
3
原创 数学建模——聚类
意思是1,2样本点划分为一类,是h6,3,4划分一类h7,h6、h7划分一类为h8,h8和样本点5划分一类。之间的距离常用欧氏距离进行度量,注意如果量纲不一样,则要进行标准化处理。对变量聚类,进而可以找出影响系统的主要因素,常用的变量相似性度量有两种①相关系数②夹角余弦,采用相关系数是最多的。对样本进行分类称为Q型聚类分析,用距离来度量样本点之间的相似程度,两组。(Y)转换为方阵,行向量Y其实就是矩阵形式的下三角矩阵的值。()函数可以求聚类树,参数应该是距离的行向量,(矩阵)可以去掉重复的非零元素,...
2022-07-28 23:11:16
1357
原创 数学建模——微分方程
diff(函数,n)%求函数的n阶导数dsolve(方程1,方程2,...,方程n,初始条件,自变量)simplify(s)对表达式s进行化简。
2022-07-27 22:06:01
1664
原创 数学建模——插值拟合
插值每一个点一定在曲线上;拟合点不一定在曲线上。如果构造n次插值多项式,则需要n+1个约束方程。插值多项式P(x)与被插函数f(x)之间的差称为截断误差,用R(x)表示。此时a0到an是未知数,未知数的系数是一个范德蒙行列式,在matlab中,直接用y除以系数矩阵即可求出未知数。对下面的观测点进行插值,并估计x=1.5处的函数值也可以使用matlab的APP中CurveFitting生成拟合曲线,选择五次线性拟合就会和插值的结果一样,在文件中,可以生成拟合后的代码。...
2022-07-20 21:56:40
4128
原创 数学建模——图与网络模型及方法(二)
连通的无圈图称为树。例如生成树若图G的生成子图H是树,则称H为G的生成树或支撑树。边权之和最小的生成树是最小生成树。连通图的生成树一定存在。构造连通图最小生成树的算法有Kruskal算法和Prim算法。...
2022-07-17 13:08:33
1559
原创 数学建模——图与网络模型及方法(一)
图,就是由一些点和这些点之间的连线组成。 |V|表示图G中顶点的个数,|E|表示边的条数。每一条边都是由连接G中两个顶点得到的一条线,记作:,vi和vj称为边的两个端点。无向图中,一条边的顶点对表示是无序的,就是说和表示的是同一条边。有公共顶点的两条边称为相邻的边,或称为邻边。同一条边的两个顶点称为相邻的顶点。带有方向的边称为有向边,又称为弧。如果给无向边的每条边规定一个方向,就得到了有向图。 环:一条边的两个端点是同一个顶点。重边(平行边):两条边或多条边的端点是同一对顶点。孤立点:不与任何边相连的顶点。
2022-06-25 17:57:39
2051
原创 数学建模——非线性规划
非线性规划:描述目标函数或约束条件条件的数学表达式中,至少有一个是非线性函数。记是n维欧式空间中的一个点(n维向量),,,是定义在上的实值函数。若f,g,h函数中至少有一个是x的非线性函数,则称如下为非线性规划模型的一般形式: 全局最优解:若,并且都有,则称为全局最优解。 局部最优解:x的邻域内(也包含于可行域),x所对应的函数值是最小的,则x为局部最优解。无约束非线性规划问题可以具体表示为:凸规划是一类特殊的非线性规划问题,可以求得全局最优解。凸集: 凸函数:定义在凸集上的有限个凸函数的非负线性组合仍为凸
2022-06-24 00:29:26
7971
原创 数学建模——整数规划
一部分或全部决策变量必须取整数值的规划问题称为整数规划。纯整数规划:全部决策变量都为整数;混合整数规划:决策变量有一部分是整数值,另一部分不是整数;0-1整数规划:决策变量只能取0或1的整数规划。整数线性规划模型(一个线性规划模型中的部分或全部决策变量为整数)一般形式:有时,也可以通过引入0-1变量将一些特定的非线性约束条件进行线性化。如果有m个相互排斥的约束条件,即同一时间只能有一个条件起作用,则引入m个0-1变量:和一个充分大的正常数M,则下面这一组m+1个约束条件就合于上述要求:例如求解如下整数规划:
2022-06-22 00:27:40
6615
原创 数学建模——线性规划
目录基本概念模型求解和应用基于求解器的求解方法基于问题的求解方法其他 运筹学的一个重要分支是数学规划,线性规划是数学规划的一个重要的分支。变量称为决策变量,规划的目标称为目标函数,限制条件称为约束条件,s.t.是“受约束于”的意思。建立线性规划模型的一般步骤为:①分析问题,找出决策变量。②找出等式或不等式约束条件。③构造关于决策变量的一个线性函数。线性规划模型的一般形式:或:为目标函数的系数向量,又称为价值向量;为决策向量;为约束方程组的系数矩阵;为约束方程组的常数向量。还有标准型:目标函数为极大型,约束条
2022-06-21 00:42:39
15670
2
原创 Cubemx的OLED开发基础
基于STM32的OLED应用,要做的事情:[1]移植OLED的底层驱动函数库。[2]准备需要的中文字符和图片等数据。[3]调用OLED驱动库中的底层函数进行应用开发。资源下载链接:https://pan.baidu.com/s/1c6aBxADw8CZ6REaq3DEzjQ提取码:xldd其中包含:基于STM32CubeMX的OLED屏驱动程序库(内含4个文件)[1] XMF_ OLED_ STM32Cube.c: 驱动程序的源文件。[2] XMF_ OLED_ STM32Cube.h.
2022-04-14 17:28:29
4298
2
原创 ADC基本工作原理和Cubemx相关开发基础
基本原理以一个恒温锅炉为例:通过温度传感器,将温度变化转换为电压变化。通过ADC将模拟的电压变化,转换为数字变化,将其编码。中央处理器根据温度数据,进行计算和逻辑控制。计算结果通过DAC转化为电压/电流信号,控制加热和冷却。A/D转换一般要经过采样、 保持、量化和编码4个过程,将时间和幅值连续的模拟量转化为时间和幅值离散的数字量。A/D转换器的几个技术指标量程:指ADC所能输入模拟信号的类型和电压范围,即参考电压。信号类型包括单极性和双极性。转换位数:量化过程中的量化位数n。A/D转换后
2022-04-13 13:08:22
905
原创 Cubemx串口数据收发基础
知识点有并行通信和串行通信两种方式。单工、半双工、全双工三种模式。常用异步串行通信:通信双方在没有同步时钟的前提下,将一个字符(包括特定的附加位)按位进行传输的通信方式。波特率:每秒钟传输的二进制位数,如9600bps。通信双方的波特率必须一样。stm32芯片串口USART1_ TX与PA9复用, USART1_ RX与PA10复用。USART2_ TX与PA2复用,USART2_ RX与PA3复用。CubeMX中关于USART的配置HAL库中串口发送的重要函数...
2022-04-10 12:00:21
6534
2
原创 Cubemx定时器开发基础
stm32系统嘀嗒定时器Sys Tick这是一个集成在Cortex M3内核当中的定时器,它并不属于芯片厂商的外.设,也就是说使用ARM内核的不同厂商,都拥有基本结构相同的系统定时器。主要目的是给RTOS提供时钟节拍做时间基准。看门狗定时器WatchDog实时时钟RTC基本定时器: TIM6、 TIM7通用定时器: TIM2、 TIM3、 TIM4、TIM5在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时器最具代表性,使用也最广泛。高级定时器:
2022-04-09 16:10:43
643
1
原创 Cubemx中断系统和外部中断基础
STM32的中断通道可能会由多个中断源共用。这就意味着,某一个中断服务函数也可能被多个中断源所共用。所以,在中断服务函数的入口处,需要有一个判断机制,用以辨别是.那个中断触发了中断。STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A),抢占属性由NVIC_IRQChannelPreemptio
2022-04-09 00:03:15
780
原创 Cubemx按键开发基础
在HAL库中关于GPIO有三个重要函数:电平输出函数:void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);电平翻转函数:void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);电平输入函数:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx,
2022-04-08 09:33:45
1092
1
原创 keil5和cubemx配置及LED闪烁实现
打开cubemx后在这里可以管理、下载需要的包:左下角有两种下载方式,还有一种可以将包所在的文件路径导入,实现添加(Help->Updater Settings修改路径)。
2022-03-19 20:44:14
1881
原创 元胞自动机
一个一个的格子看做是一个个的元胞,他们按照自己的规则自动进行状态改变就是元胞自动机。定义:是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。元胞自动机由元胞、元胞空间、元胞邻居、元胞规则组成。元胞可以称为单元或基元,是元胞自动机最基本的部分。每个元胞有一个状态,比如说将元胞看做人,拥有生和死两种状态,元胞的状态按照规则不断进行更新。元胞空间就是元胞在空间分布撒上的集合,元胞空间的类型根据其形状命名。用的最多的还是正方形
2022-03-19 16:51:11
9489
原创 基于CIFAR10的完整模型测试套路
利用已经训练好的模型,给其提供输入,对输出进行判断。CIFAR10有狗的分类,于是我们找一张狗的图片:png格式的图片有四个通道,除了RGB外,还有一个透明度通道,所以调用:image = image.convert('RGB')打印图片相关信息:from PIL import Imageimage_path = './imgs/img.png'image = Image.open(image_path)image = im...
2022-02-21 21:43:15
423
原创 基于CIFAR10的完整模型训练套路
首先准备数据集:train_data = torchvision.datasets.CIFAR10('./dataset', train=True, transform=torchvision.transforms.ToTensor(), download=True)#训练数据集test_data = torchvision.datasets.CIFAR10('./dataset', train=False, transform=torchvision.transforms.ToTensor(),
2022-02-21 19:13:12
2230
1
原创 利用GPU训练模型
利用.cuda()函数网络模型中,有三种变量可以调用.cuda(),分别是网路模型、数据(输入、标注)、损失函数,调用完需要返回。 以之前的一个网络为例:import torchimport torchvisionfrom torch import nnfrom torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("./dataset", train=False...
2022-02-19 21:12:09
3180
原创 网络模型的保存和读取
先新建一个网络模型:import torchvisionvgg16 = torchvision.models.vgg16(pretrained=False)pretrained=False意思是该网络模型是初始没有经过训练的。方式1:保存数据:import torch torch.save(vgg16, 'vgg16_method1.pth')这种方式既保存了网络结构也保存了网络中的参数加载数据:import torchmodel = torc
2022-02-17 21:39:32
1295
原创 pytorch——现有网络模型的使用和修改
以VGG网络为例,在Docs中,选择图像相关的torchvision,左侧的torchvision.models是一些现成的网络模型,右侧是网络模型的一个分类,第一个便是和分类有关的模型。vgg最常用的就是vgg16和vgg19:参数pretrained如果为True,则模型中的参数使用现有的已经在ImageNet数据集中训练完成的,若为False,则参数没有经过任何训练,process若为True,则会显示一个下载进度条。...
2022-02-15 17:57:20
1593
原创 pytorch——优化器使用
使用步骤:建立一个优化器,对参数的每一个梯度清零,调用损失函数的反向传播(backward)求出每一个参数的梯度,最后对每一个参数进行调优。以随机最速下降法 (SGD)为例:参数params用来指明网络中需要优化的参数,lr为学习速率。准备数据集:dataset = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTenso...
2022-02-12 19:23:04
2629
原创 pytorch——损失函数
Loss用来做两件事,一是计算实际输出和目标之间的差距,二是为我们反向传播更新数据提供一个依据。首先查看L1Loss函数官方文档:有两种方式,一个默认的mean,求的是平均值,另一个sum,求的是和:import torchfrom torch.nn import L1Lossinput = torch.tensor([1, 2, 3], dtype=torch.float32)target = torch.tensor([1, 2, 5], dtype=torch.float32
2022-02-11 15:46:39
1142
原创 神经网络——cifar10网络搭建、Sequential使用
CIFAR 10 模型结构:通过图片可以知道,输入为3通道的32*32大小数据,第一步卷积,通过5*5的一个卷积核,得到32通道的32*32的大小,接着通过2*2的最大池化层得到32通道的16*16...得到64通道的4*4数据,经过flatten展开为1024个一行的数据,通过线性层得到隐藏层的64个数据,再经过一个线性层得到输出。第一层的卷积层,可以知道参数in_channels为3,out_channels为32,kernel_size为5,而大小32*32没有变化,则由官方文档的公式:
2022-02-06 11:48:12
2453
原创 神经网络——线性层
线性层参数 in_features 就是输入x,out_features 是线性层的输出是上图的g。x到g的关系式为:,其中的是权重,是偏置(参数bias为True时,才存在)。阅读官方文档可知,weight和bias都是从分布中采样初始化,经过训练得最终结果。在vgg16模型中,将224*224*3的图片转变为了1*1*4096的大小,经过训练,得到最终的1*1*1000的结果。我们也采取相同的方式:import torchimport torchvision...
2022-02-04 17:35:12
9354
原创 神经网络——非线性激活
非线性介绍非线性变换的主要目的就是给网中加入一些非线性特征,非线性越多才能训练出符合各种特征的模型。常见的非线性激活:ReLU:* 表示输入的形状可以任意在进行网络初始化时,发现ReLU有一个参数inplace:input = -1ReLU(input, inplace=True)input = 0input = -1output = ReLU(input, inplace = False)input = -1output = 0#inp...
2022-02-02 20:41:19
1942
原创 神经网络——最大池化
最大池化的目的在于保留原特征的同时减少神经网络训练的参数,使得训练时间减少。相当于1080p的视频变为了720p最大池化介绍池化层最常用的是下采样,其中参数:kernel_size:设置取最大值的窗口,类似于卷积层的卷积核,如果传入参数是一个int型,则生成一个正方形,边长与参数相同;若是两个int型的元组,则生成长方形。stride:步径,与卷积层不同,默认值是kernel_size的大小。padding:和卷积层一样,用法类似于kernel_size。dila...
2022-02-01 23:46:57
11131
原创 神经网络卷积层Conv2d的使用
in_channels是输入的图片的channel数;out_channels是输出的通道数;kernel_size用来设置卷积核的大小,卷积核的初值是某个分布中的采样,随着训练的进行,值是不断变化的;stride是步径,卷积核移动的格数;padding是输入的外围拼接的大小。out_channels取决于卷积核的数量,卷积核也有in_channels参数,该参数取决于需要进行卷积操作的数据的channels。例如,6*6*3的图片样本,使用3*3*3的卷积核,输入...
2022-01-27 20:22:58
4140
原创 神经网络基本骨架、结构的原理及使用
目录神经骨架的使用基本神经结构的使用神经骨架的使用首先我们进官网进行相关信息的查询:container(相当于一个骨架)之中有六个模块,最常用的是module模块,因为对所有神经网络提供了一个最基本的类。根据module的介绍,我们知道自己创建的model也需要继承该类 。from torch import nnclass Model(nn.Module): def __init__(self): supe...
2022-01-26 22:50:14
1427
原创 pytorch——Dataloader的使用
Dataset相当于数据集,而Dataloader顾名思义是一个装载数据集的一个工具,从dataset中取数据。先进入官网进行学习:创建一个数据集和一个dataloader:import torchvisionfrom torch.utils.data import DataLoader#准备一个测试集test_data = torchvision.datasets.CIFAR10(root="./dataset", train=False, trans...
2022-01-25 19:49:07
1868
原创 pytorch——torchvision中的数据集的使用
首先我们打开pytorch的官方网页比如我们打开其中的torchvision,我们可以看到其中有很多的数据集:其中有很多是我们常用的、用来学习的数据集。接着的torchvision.models是一些常见的神经网络:我们以CIFAR为例:root是存在或下载保存的路径;train如果是True,则作为训练集,否则是测试集;transform可以对数据集进行一个变化;download会设置下载数据集。import torchvisiontrain_set = tor...
2022-01-24 19:21:23
937
原创 pytorch——常见的Transforms
transforms相当于一个工具箱,里面的类(class)totensor、resize等相当于工具。图片经过工具的处理,就会得到我们想要的结果。首先我们查看transforms的源代码中的totensor函数:class ToTensor: """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. This transform does not support torchscript.def __call__(sel
2022-01-23 19:50:03
1004
原创 pytorch——Tensorboard使用
目录add_scalar()函数add_image()函数 Tensorboard是常用的一种可视化的工具,我们对其中的SummaryWriter类进行调用。我们可以查阅其相关说明: 我们通常使用初始化函数中的第一个参数:文件的名称,也可以不对其进行配置,采用默认。add_scalar()函数使用其中的add_scalar函数,首先查阅说明:tag相当于图像的标题; scalar_value是要保存的数值,相...
2022-01-21 22:23:20
1335
原创 使用镜像下载库
pip install -ihttps://pypi.tuna.tsinghua.edu.cn/simple+包名下载很快。PS:使用pip下载时,可能应网络较差而超出默认时间,可以修改时间相应:pip --default-timeout=100 install 包名(Windows系统)pip --default-timeout=100 install -U 包名(Linux系统)...
2022-01-21 20:40:58
866
原创 pytorch——mnist手写数据识别
1、pytorch自带的数据集 pytorch中自带数据集由两个上层的API提供,分别是torchvision和torchtext。其中,torchvision提供了对照片数据处理相关的API和数据,数据所在位置:torchvision.datasets,比如torchvision.datasets.MNIST(手写数字照片数据);torchtext提供了对文本数据处理相关的API和数据,数据所在位置:torchtext.datasets,比如torchtext.datasets.IMDB...
2021-12-03 09:48:20
11514
10
原创 pytorch——数据加载
1、模型中使用数据加载器的目的 深度学习中,数据量通常是非常多、量非常大的,大量的数据,不可能一次性地在模型中进行向前的计算和反向传播,通常,我们会对整个数据进行随机的打乱数据,把数据处理成一个一个的batch,同时还会对数据进行预处理。2、数据集类2.1Dataset基类介绍 在torch中,提供了数据集的基类torch.utils.data.Dataset,继承这个基类,能够很快地实现对数据的加载。torch.utils.data.Data...
2021-11-29 17:22:13
1617
原创 pytorch——API实现线性回归
在pytorch中预设了一些更加灵活简单的对象,让我们来构造模型、定义损失、优化损失等1、nn.Module nn.Module是torch.nn提供的一个类,是pytorch中我们自定义网络的一个基类,在这个类中定义了很多的方法,使得我们在继承这个类的时候非常的简单。 当我们自定义网络的时候,有两个方法需要特别注意: 1、__init__需要调用super方法,继承父类的属性和方法。 ...
2021-11-27 17:31:20
1061
原创 pytorch——线性回归实现
我们使用一个自定义的数据,来使用torch实现一个简单的线性回归。假设我们的基础模型就是,其中,是参数,我们使用来构造数据,,所以最后通过模型应该能够得出的应该是分别接近3和0.8。1、准备数据 根据创建函数x = torch.rand([500,1])#创建一个500行1列的数据y_true = x * 3 + 0.82、通过模型构建y_predict 因为需要反向计算梯度,所以将requires_grad设置为Truew = to...
2021-11-25 23:52:49
368
原创 pytorch——梯度计算
1、梯度介绍梯度是一个向量,是学习(参数更新的方向)。收集数据,构建机器学习模型,得到判断模型好坏的方法:(回归损失)(分类损失)通过调整参数,尽可能降低随机选择一个起始点,通过调整,使得函数取得最小值。的更新方法:①计算的梯度(即导数):②更新:其中,,意味着将增大,,意味着将减小。当小到一定的程度或者循环达到一定次数后,或停止循环。...
2021-11-23 23:20:56
8401
2
emnist中byclass数据集的png图片
2022-09-06
利用keil5和cubemx开发,结合超声波、人体红外、光敏三个传感器,实现对灯光的控制。
2022-06-01
linux中restore时,illegal instruction
2022-12-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人