tag 标签: 入门

相关博文
  • 热度 5
    2023-10-29 19:26
    615 次阅读|
    0 个评论
    • 实验环境 工程文件下载链接! 本次实验是通过Proteus+MDK一起模拟完成的。Proteus模拟实际电路,MDK编译代码。Proteus版本是8.9,MDK版本是5.36。需要注意的是,Proteus需要安装8.8以上版本,器件库里面要支持STM32F401VE。 • 实验目的 通过定时器3TIM3,计数,8位数码管,一个3*4的键盘来实现一个简单的可设置电子时钟。 •主控: STM32F401VE,Cotex-M4内核,主频最大84MHz,程序空间512KB,FLASH空间96KB。 •时钟: 没有用外部晶振,因为Proteus只支持一种时钟树,所以这里采用内部晶振,做实验够了。 •复位电路: 没有配置相关外设电路,因为Proteus默认是有电压的,默认是复位的,毕竟是仿真软件,主要是验证程序功能。 • IO说明: 我们利用PD0~PD7以及PC0~PC7控制数码管、PE0~PE6控制键盘输入。
  • 热度 33
    2020-7-5 14:42
    5312 次阅读|
    0 个评论
    【不用开发板学习STM32】一般流水灯实验(文末获取代码及工程文件)
    • 实验环境 本次实验是通过Proteus+MDK一起模拟完成的。Proteus模拟实际电路,MDK编译代码。Proteus版本是8.9,MDK版本是5.21。需要注意的是,Proteus需要安装8.8以上版本,器件库里面要支持STM32F103C6。 • 实验目的 通过点亮三个LED,我们俗称的流水灯,来了解STM32的GPIO是怎么配置的。我们实验设置了Systick,即系统滴答时钟,延时也是通过这个滴答时钟来配置的,可以通过这个实验学习一下,怎么配置Systick,以及Systick中断怎么用。 • 主控: STM32F103C6(本来想用C8的,但是Proteus只有C6,本质上只有Flash和SRAM大小的区别,所有没有必要纠结) • 时钟: 没有用外部晶振,因为Proteus只支持一种时钟树,所以这里采用内部晶振,做实验够了。 • 复位电路: 复位电路如图,包含了上电复位电路一个10K电阻(图上用的是100K实际应该都是可以的)+一个100nF电容。按键复位电路,包含了一个自复位按键,按下后,RST管脚就会短路到GND,MCU就会复位。 • IO说明: 我们利用PA1、PA2、PA3来分别控制3个LED灯,输出低电平的时候,LED灯点亮。 • 代码目录概述: APP文件夹:主要包含应用函数的.C文件。 BSP文件夹:主要包含底层硬件驱动的.C文件。 MDK-ARM文件夹:主要包含STM32的启动的.S文件。 StdPeriph_Driver文件夹:主要包含ST官方提供的标准外设驱动.C文件(不是HAL库哦)。 CMSIS文件夹:系统内核配置文件,标准库自带的。 • 代码内容概述: ↓↓↓ GPIO初始化,先打开GPIOA的时钟,然后把PA1、PA2、PA3设置成推挽输出,代码如下: GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = LED1_Pin | LED2_Pin | LED3_Pin; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); ↓↓↓ Systick也要初始化,这里滴答时钟设置成1ms进一次中断,代码如下: void bsp_InitSysTick(void) { if (SysTick_Config(SystemCoreClock / 1000)) { /* Capture error */ while (1); } } ↓↓↓这里我们使用的是内部时钟,所以在初始化外设后还要把MCU设置成使用内部时钟,代码如下: void RCC_Configuration(void) { RCC_DeInit(); RCC_HSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_ADCCLKConfig(RCC_PCLK2_Div4); RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_10); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); } ↓↓↓ 更详细代码及工程文件,关注回复编号2001就能获取!!
相关资源
  • 所需E币: 0
    时间: 2024-9-3 08:30
    大小: 909.55KB
    上传者: 乖乖兔爸爸
    SPI的特点是:偏执的全双工fullduplex 
  • 所需E币: 0
    时间: 2024-9-2 14:18
    大小: 930.84KB
    上传者: 乖乖兔爸爸
    1 I2C能力概述2 I2C操作细节 3 I3C的未来
  • 所需E币: 0
    时间: 2024-8-13 09:00
    大小: 1.96MB
    上传者: 乖乖兔爸爸
    真传一句话,假传万卷书;FPGA_入门,还要看FPGA_老鸟写的材料;
  • 所需E币: 0
    时间: 2024-4-19 15:55
    大小: 2.43KB
    上传者: 开心就很好了
    随着国内越来越多的企业开始使用Go语言,Go语言一度变得火热,成为不少程序员朋友的首选语言。Go语言最早诞生于谷歌,出自谷歌的三位大牛之手,自2009年发布以来,Go语言已经度过了第12个年头,相比于其它语言,可谓是语言界的新生儿。Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易Go是从2007年末由RobertGriesemer,RobPike,KenThompson主持开发,后来还加入了IanLanceTaylor,RussCox等人,并最终于2009年11月开源,在2012年早些时候发布了Go1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go的语法接近C语言,但对于变量的声明有所不同,Go支持垃圾回收功能。Go是从2007年末由RobertGriesemer,RobPike,KenThompson主持开发,后来还加入了IanLanceTaylor,RussCox等人,并最终于2009年11月开源,在2012年早些时候发布了Go1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。目前Go语言支持Windows、Linux等多个平台,也可以直接在Android和iOS等移动端执行,从业务角度来看,Go语言在云计算、微服务、大数据、区块链、物联网、人工智能等领域都有广泛的应用。所以当下学习正当时。go语言特点天生支持并发语法简单,容易上手内置runtime,支持垃圾回收可直接编译成机器码,不依赖其他库丰富的便准库可跨平台编译部署维护成本低go语言应用领域服务器编程开发云平台区块链分布式系统网络编程Go语言用途Go语言被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。命名Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。Go语言中类似if和switch的关键字有25个;关键字不能用于自定义名字,只能在特定语法结构中使用。声明声明语句定义了程序的各种实体对象以及部分或全部的属性。Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明。一个Go语言编写的程序对应一个或多个以.go为文件后缀名的源文件。每个源文件中以包的声明语句开始,说明该源文件是属于哪个包。包声明语句之后是import语句导入依赖的其它包,然后是包一级的类型、变量、常量、函数的声明语句,包一级的各种类型的声明语句的顺序无关紧要(译注:函数内部的名字则必须先声明之后才能使用)简短变量声明在函数内部,有一种称为简短变量声明语句的形式可用于声明和初始化局部变量。它以“名字:=表达式”形式声明变量,变量的类型根据表达式来自动推导。下面是lissajous函数中的三个简短变量声明语句:anim:=gif.GIF{LoopCount:nframes}freq:=rand.Float64()*3.0t:=0.0packagemainimport"fmt"funcmain(){name:="yjh"age:=18  //:=自动推导  fmt.Println(name,age)}这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。它可以自动的推导出一些类型,但是使用也是有限制的;定义变量,同时显示初始化。不能提供数据类型只能在函数内部。不能随便到处定义
  • 所需E币: 0
    时间: 2024-5-24 17:08
    大小: 2.93KB
    一、PyQT的概念PyQt是一个创建PythonGUI应用程序的工具包,是Qt和Python结合的一个产物,可以说是为了将Qt的功能用于Python开发的一个Qt的Python包装器。它是Python编程语言和Qt库的成功融合。PyQt的整个程序开发框架,主要包括如下部分:图形界面编辑的工具:QtDesigner不同部分信息交换机制:信号和槽界面操作的事件及捕获机制一套控制界面显示和数据存储分离以及映射的机制:Model/View架构通过这些重要的工具和框架机制,开发人员可以设计对应的GUI图形化界面、定义不同部件的操作及响应、捕获部件或应用的消息以及实现界面显示组件和数据存储组件的联动,从而构造完整的应用程序框架。PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。二、OpenCVOpenCV项目最初由Intel于1999年启动,当时的目标是提供一个免费的计算机视觉库,并开放其源代码,以促进计算机视觉研究的发展。随后,OpenCV在2000年发布了第一个公开版本,从那时起,OpenCV迅速成为了计算机视觉领域最受欢迎的库之一。后来,OpenCV的开发由WillowGarage公司继续,随后由Itseez公司接管,直到今天,OpenCV的开发由OpenCV开发团队维护。核心功能和模块:OpenCV库包含了众多的模块,每个模块都提供了不同的功能,以下是一些核心的模块:2.1核心功能模块(CoreModule)这个模块提供了基本的数据结构和功能,包括图像数据类型、矩阵操作、文件IO等。图像操作:读取和保存图像:可以使用imread()函数读取图像文件,使用imwrite()函数保存图像到文件。图像属性访问:可以通过Mat对象的属性访问功能获取图像的尺寸、通道数、数据类型等信息。像素操作:可以直接访问和修改图像的像素值,或者使用像素迭代器遍历图像。图像通道操作:可以将多通道图像拆分成单通道图像,或者将单通道图像合并成多通道图像。创建矩阵:可以使用Mat类的构造函数或create()函数创建矩阵。矩阵运算:支持常见的矩阵运算,如加法、减法、乘法等。矩阵转换:可以对矩阵进行转置、仿射变换、透视变换等操作。2.2图像处理模块(ImageProcessingModule)OpenCV的图像处理模块提供了各种图像处理算法,包括图像滤波、边缘检测、图像变换等。这些算法可以帮助用户对图像进行预处理、增强、分析和特征提取等操作。下面是图像处理模块中常用的功能和算法:图像滤波(ImageFiltering):平滑滤波(SmoothingFilters):如均值滤波、高斯滤波、中值滤波等,用于去除图像中的噪声。锐化滤波(SharpeningFilters):如拉普拉斯滤波器、Sobel滤波器等,用于增强图像的边缘和细节。图像变换(ImageTransformations):几何变换(GeometricTransformations):如平移、旋转、缩放、仿射变换等,用于调整图像的尺寸和位置。透视变换(PerspectiveTransformation):用于校正图像中的透视失真。边缘检测(EdgeDetection):Sobel算子:Sobel算子通常用于灰度图像的边缘检测,其基本思想是利用图像中像素灰度值的变化情况来识别边缘。Sobel算子在水平和垂直方向上分别定义了两个卷积核(通常为3x3的矩阵),用于计算图像中每个像素点的水平和垂直方向的梯度值。Canny边缘检测:首先,对输入图像进行高斯滤波,以减少图像中的噪声。高斯滤波可以平滑图像,并模糊图像中的细节,从而有助于检测到真实的边缘。在经过高斯滤波的图像上,利用Sobel算子或其他梯度算子计算图像的梯度幅值和梯度方向。梯度方向可以帮助确定边缘的方向。对图像中的梯度幅值进行非极大值抑制,保留局部梯度幅值最大的像素点,以使得边缘变得更细化。利用双阈值检测策略对梯度幅值进行阈值处理,将图像中的像素点分为强边缘、弱边缘和非边缘三类。通常设置两个阈值,一个是高阈值(highthreshold),用于确定强边缘像素;另一个是低阈值(lowthreshold),用于确定弱边缘像素。通过连接强边缘像素,利用弱边缘像素进行边缘跟踪,得到完整的边缘。三、人工智能应用人工智能在生活中的应用有:1、虚拟个人助理,使用者可通过声控、文字输入的方式,来完成一些日常生活的小事;2、语音评测,利用云计算技术,将自动口语评测服务放在云端,并开放api接口供客户远程使用;3、无人汽车,主要依靠车内的以计算机系统为主的智能驾驶仪来实现无人驾驶的目标;4、天气预测,通过手机gprs系统,定位到用户所处的位置,在利用算法,对覆盖全国的雷达图进行数据分析并预测。
  • 所需E币: 1
    时间: 2024-4-23 19:59
    大小: 49.17KB
    上传者: 张红川
    模拟电路入门100个知识点.docx
  • 所需E币: 0
    时间: 2024-3-19 14:25
    大小: 3.18KB
    上传者: 开心就很好了
    一、什么是pytorchPyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。二、为什么使用PyTorch?机器学习研究人员喜欢使用PyTorch。截至2022年2月,PyTorch是PapersWithCode上最常用的深度学习框架,该网站用于跟踪机器学习研究论文及其附带的代码存储库。PyTorch还有GPU加速,使代码运行得更快,你可以专注于操作数据和编写算法。三、PyTorch库的优势通过将模型应用到例证,深度学习允许我们执行很多复杂任务,如机器翻译、玩战略游戏以及在杂乱无章的场景中识别物体等。为了在实践中做到这一点,我们需要灵活且高效的工具,以便能够适用于这些复杂任务,能够在合理的时间内对大量数据进行训练。我们需要已被训练过的模型在输入变量变化的情况下正确执行。接下来看看我们决定使用PyTorch的一些原因。PyTorch很容易被推广,因为它很简单。许多研究人员和实践者发现它易于学习、使用、扩展和调试。它是Python化的,虽然和任何复杂领域一样,它有注意事项和最佳实践示例,但对于以前使用过Python的开发人员来说,使用该库和使用其他Python库一样。更具体地说,在PyTorch中编写深度学习机是很自然的事情。PyTorch为我们提供了一种数据类型,即张量,通常用来存储数字、向量、矩阵和数组。此外,PyTorch还提供了操作它们的函数,我们可以使用这些函数来增量编程。如果我们愿意,还可以进行交互式编程,就像平常使用Python一样。如果你知道NumPy,那么你对交互式编程应是非常熟悉的。PyTorch具备2个特性,使得它与深度学习关联紧密。首先,它使用GPU加速计算,通常比在CPU上执行相同的计算速度快50倍。其次,PyTorch提供了支持通用数学表达式数值优化的工具,该工具用于训练深度学习模型。四、创建数据Tensors张量是一种特殊的数据结构,它和数组还有矩阵十分相似。在Pytorch中,Tensors可以在gpu或其他专用硬件上运行来加速计算之外,其他用法类似Numpy。importtorchimportnumpyasnp#直接从数据创建data=[[1,2],[3,4]]x_data=torch.tensor(data)x_data.shape#全为1x_ones=torch.ones_like(x_data)#retainsthepropertiesofx_dataprint(f"OnesTensor:\n{x_ones}\n")#全为0x_rand=torch.rand_like(x_data,dtype=torch.float)#overridesthedatatypeofx_dataprint(f"RandomTensor:\n{x_rand}\n")#查看tensor类型tensor=torch.rand(3,4)print(f"Shapeoftensor:{tensor.shape}“)print(f"Datatypeoftensor:{tensor.dtype}”)print(f"Devicetensorisstoredon:{tensor.device}")步骤2:自动梯度计算在Pytorch中可以使用tensor进行计算,并最终可以从计算得到的tensor计算损失,并进行梯度信息。在Pytorch中主要关注正向传播的计算即可。#x=torch.ones(2,2,requires_grad=True)x=torch.tensor([[1,2],[3,4]],dtype=float,requires_grad=True)print(x)y=x+2print(y)print(y.grad_fn)#y就多了一个AddBackwardz=y*y*3out=z.mean()print(z)#z多了MulBackwardprint(out)#out多了MeanBackward#计算公式:out=0.25((x+2)*(x+2)*3)out.backward()print(x.grad)步骤3:拟合曲线接下来我们将尝试使用Pytorch拟合一条曲线,我们首先的创建待你和的参数,并加载待训练的数据。#需要计算得到的参数w=torch.ones(1,requires_grad=True)b=torch.ones(1,requires_grad=True)#数据x_tensor=torch.from_numpy(x)y_tensor=torch.from_numpy(y)#目标模型#y=wx+b定义损失defmse(label,pred):diff=label-predreturntorch.sqrt((diff**2).mean())pred=x_tensor*w+bloss=mse(y_tensor,pred)#执行20次参数更新for_inrange(20):#重新定义一下,梯度清空w=w.clone().detach().requires_grad_(True)b=b.clone().detach().requires_grad_(True)#正向传播pred=x_tensor*w+b#计算损失loss=mse(y_tensor,pred)print(loss)#计算梯度loss.backward()五、完整代码(GPU)使用GPU训练只需要把训练数据、模型放入GPU中即可指定是否使用GPU训练模型device=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu")模型放入GPU中model.to(device)数据放入GPU中inputs=torch.from_numpy(x_train).to(device)labels=torch.from_numpy(y_train).to(device)importtorchimporttorch.nnasnnimportnumpyasnpclassLinear_yy(torch.nn.Module):  def__init__(self,in_dim,media_dim,out_dim):    super(Linear_yy,self).__init__()    self.linear_1=torch.nn.Linear(in_dim,media_dim)    self.linear_2=torch.nn.Linear(media_dim,out_dim)       defforward(self,x):    x=self.linear_1(x)    x=self.linear_2(x)    returnx   in_dim=1media_dim=2out_dim=1model=Linear_yy(in_dim=in_dim,media_dim=media_dim,out_dim=out_dim)device=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu")model.to(device)epochs=1000learning_rate=0.0001optimizer=torch.optim.Adam(model.parameters(),lr=learning_rate)loss_faction=torch.nn.MSELoss()forepochinrange(epochs):  epoch+=1  #注意转行成tensor  inputs=torch.from_numpy(x_train).to(device)  labels=torch.from_numpy(y_train).to(device)     #梯度要清零每一次迭代  optimizer.zero_grad()   #前向传播  outputs=model(inputs)  #计算损失  loss=loss_faction(outputs,labels)  #返向传播  loss.backward()  #更新权重参数  optimizer.step()  ifepoch%50==0:    print('epoch{},loss{}'.format(epoch,loss.item()))
  • 所需E币: 0
    时间: 2024-3-19 14:56
    大小: 2.48KB
    一、Pytorch功能PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。PyTorch提供了两个高级功能:具有强大的GPU加速的张量计算(如Numpy)包含自动求导系统的深度神经网络除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。Torch是一个有大量机器学习算法支持的科学计算框架,是一个与Numpy类似的张量(Tensor)操作库,其特点是特别灵活,但因其采用了小众的编程语言是Lua,所以流行度不高,这也就有了PyTorch的出现。所以其实Torch是PyTorch的前身,它们的底层语言相同,只是使用了不同的上层包装语言。PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。PyTorch提供了两个高级功能:*具有强大的GPU加速的张量计算(如Numpy)*包含自动求导系统的深度神经网络二、Pytorch使用场景1.图像和语音识别PyTorch在图像和语音识别领域得到了广泛应用,包括对图像进行分类、目标检测、语音情感识别等。2.自然语言处理PyTorch在自然语言处理领域也有很多应用,包括对文本进行分类、情感分析、机器翻译等。3.机器学习PyTorch也可以用于传统机器学习问题,例如分类、回归等问题。4.深度学习教学和研究PyTorch使用简单,易于理解,适合用来进行深度学习教学和研究。三、训练流程准备好数据和网络之后,就可以开始训练模型了,训练的过程分为train和test,其中train做训练,test做验证。训练的过程包括3个超参数Epochs-迭代数据集的次数,也就是说对数据集进行了多少次迭代BatchSize-一次训练的样本数LearningRate-学习率。较小的值会导致学习速度变慢,而较大的值可能会导致训练过程中出现不可预测的行为。learning_rate=1e-3batch_size=64epochs=5deftrain_loop(dataloader,model,loss_fn,optimizer):  size=len(dataloader.dataset)  forbatch,(X,y)inenumerate(dataloader):    #Computepredictionandloss    pred=model(X)    loss=loss_fn(pred,y)    #Backpropagation    optimizer.zero_grad()    loss.backward()    optimizer.step()    ifbatch%100==0:      loss,current=loss.item(),batch*len(X)      print(f"loss:{loss:>7f} [{current:>5d}/{size:>5d}]")deftest_loop(dataloader,model,loss_fn):  size=len(dataloader.dataset)  num_batches=len(dataloader)  test_loss,correct=0,0  withtorch.no_grad():    forX,yindataloader:      pred=model(X)      test_loss+=loss_fn(pred,y).item()      correct+=(pred.argmax(1)==y).type(torch.float).sum().item()  test_loss/=num_batches  correct/=size  print(f"TestError:\nAccuracy:{(100*correct):>0.1f}%,Avgloss:{test_loss:>8f}\n")loss_fn=nn.CrossEntropyLoss()optimizer=torch.optim.SGD(model.parameters(),lr=learning_rate)epochs=10fortinrange(epochs):  print(f"Epoch{t+1}\n-------------------------------")  train_loop(train_dataloader,model,loss_fn,optimizer)  test_loop(test_dataloader,model,loss_fn)print("Done!")模型保存和加载通过pytorch可以保存和加载训练好的模型。在PyTorch中,torch.nn.Module模型的可学习参数(即权重和偏差)包含在模型的参数中(通过model.parameters()访问)。state_dict是一个Python字典对象,它保存了模型每一层的参数。#Printmodel'sstate_dictprint("Model'sstate_dict:")forparam_tensorinmodel.state_dict():  print(param_tensor,"\t",model.state_dict()[param_tensor].size())打印结果如下Model'sstate_dict:conv1.weight   torch.Size([6,3,5,5])conv1.bias  torch.Size([6])conv2.weight   torch.Size([16,6,5,5])conv2.bias  torch.Size([16])fc1.weight  torch.Size([120,400])fc1.bias   torch.Size([120])fc2.weight  torch.Size([84,120])fc2.bias   torch.Size([84])fc3.weight  torch.Size([10,84])fc3.bias   torch.Size([10])四、总结至此,pytorch的基本使用就介绍完成了,可以看出结合深度学习网络pytorch提供了非常好用的接口,帮助我们创建网络、加载数据、训练和部署等,极大的提高了深度学习的效率,后面我们将结合具体的例子对pytorch的使用做一个介绍。
  • 所需E币: 0
    时间: 2024-4-1 13:59
    大小: 3.08KB
    上传者: 开心就很好了
    Go语言高效、简洁、并发能力强大,被称为“云计算时代的C语言”,岗位需求旺盛,更是国内一线大厂的“高薪”宠儿。本文作者将结合企业级内容库系统实战,带给你一条高效的Go语言入门学习路径,不仅带你系统掌握Go的核心语法,更涵盖了系统架构设计、微服务化、系统优化、加工流引擎和立体化监控系统搭建等实用技能,助你快速吸收大厂实践经验与技巧,新手轻松进阶。一、那么,首先,我们先来认识Go,什么是GO语言Go语言,也被称为Golang,是由Google公司开发的一种静态强类型、编译型并具有垃圾回收功能的编程语言。Go语言在2009年首次发布,设计目标是简洁、高效、安全和并发,旨在提供一种易于编写和维护的系统级编程语言。它的语法简单易懂,学习曲线平缓,功能强大,结合了Python和C语言的特性,具有Python的开发效率和C语言的性能。Go语言在网络编程、分布式系统开发、命令行工具和系统工具开发等方面表现出色,提供了一组强大的网络库和丰富的工具库,使得开发高性能的网络应用程序、分布式系统和微服务架构变得容易。此外,Go语言的并发模型强大,使用轻量级的协程(goroutines)和通道(channels)实现并发编程,可以充分利用多核处理器的性能。二、go语言适合做什么1、网络编程2、服务器端开发3、分布式存储领域4、写工具5、造轮子6、内存数据库和云平台领域开发7、区块链领域8、爬虫及大数据9、云原生应用开发10、云原生微服务还有很多,就不在此一一列举三、go语言前景如何想必这个是大家最关心的问题,go语言的前景比较乐观。随着云计算和分布式系统的快速发展,许多大型公司和初创企业都在使用go语言作为其核心开发语言之一。在处理大量并发任务时,go语言可以更好地利用系统资源,提高程序的执行效率。go语言的生态系统也比较完善,拥有丰富的第三方库和工具,支持各种操作系统和平台。go语言的社区非常活跃,有大量的开源项目和开发者贡献的代码,开发者可以获得更多的帮助和学习资源等等。Go语言的前景比较乐观。然而,需要注意的是,任何编程语言都有其适用场景和优缺点。在选择编程语言时,需要根据实际需求和项目特点进行综合考虑。同时,持续学习和掌握新技术也是保持竞争力的重要手段。四、GO环境安装学习Go语言之前,必须学会如何搭建Go语言的开发环境,不同操作系统有不一样的安装方式。1、在Windows下安装Go在浏览器访问golang官网,单击Windows的下载链接,浏览器自动下载MSI安装包,双击运行下载好的MSI安装包即可启动安装程序,在欢迎界面,直接单击Next即可。看到Go语言的用户许可协议,直接勾选IacceptthetermsintheLicenseAgreement复选框,然后单击Next按钮,选择Go语言的安装路径,默认安装到C:\ProgramFiles\Go\文件夹,我将安装路径改为D:\develop_tools\go文件夹。安装路径设置成功后,下一步直接单击Next按钮,再单击Install按钮,等待程序完成安装,最后单击Finish按钮即可完成整个安装过程。安装完成后打开CMD窗口,在CMD窗口下输入goversion并按回车键即可看到当前Go语言的版本信息,说明我们已完成Go语言开发环境的搭建。ps:大多数情况下,使用MSI安装包搭建Go语言开发环境无须设置系统的环境变量。如果在CMD窗口下查看Go语言的指令信息出现异常,则说明Go语言还没有添加到系统的环境变量,此时需要手动添加。为了后续维护的方便,我这里统一设置一下Go的环境变量。2、在Linux下安装Go目前主流的Linux操作系统有Debian,Ubuntu,RedHat,CentOS,Fedora等,不同操作系统在使用上存在一定差异,但从整体来看都是大同小异。本小节以64位的CentOS7操作系统为例,讲述如何搭建Go语言的开发环境。①从Windows/MacOS将下载好的go1.21.1.linux-amd64.tar.gz安装包到/data/soft/目录下②解压:[root@amoxiangsoft]#tar-zxvfgo1.21.1.linux-amd64.tar.gz,解压成功后,cdgo,输入bin/goversion并按回车键,系统将会显示Go语言的版本信息,配置环境变量:[root@amoxianggo]#vim/etc/profile。③环境变量立刻生效:source/etc/profile。系统环境变量添加成功后,在CentOS7命令行的任意路径下输入goversion指令就能看到Go语言的版本信息。Go语言的开发环境搭建成功后,下一步安装集成开发环境(IntegratedDevelopmentEnvironment,IDE)。集成开发环境是提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,它是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件。常用的IDE软件有GoLand,VSCode,VimGO,SublimeText,LiteIDE,Eclipse,Atom等。
  • 所需E币: 0
    时间: 2024-3-5 10:47
    大小: 62.55KB
    上传者: 随遇而安1992
    这是为培训专业测试人员参加测试工作,而编写的包含测试基础知识的入门培训教材,适合将来参加测试工作的测试人员或者将来参加开发的程序员。
  • 所需E币: 0
    时间: 2024-2-27 21:09
    大小: 36.23MB
    上传者: zhusx123
    Altium-Designer快速入门(第2版)
  • 所需E币: 0
    时间: 2024-2-27 21:38
    大小: 13.31MB
    上传者: zhusx123
    RA2E1RA2L1入门指南
  • 所需E币: 0
    时间: 2024-2-22 17:05
    大小: 3.06KB
    一、Prometheus的概念和发展史Prometheus是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对Prometheus做一个基本的认识。Prometheus发展速度很快,12年开发完成,16年加入CNCF,成为继K8s之后第二个CNCF托管的项目,目前Github42k的,而且社区很活跃,维护频率很高,基本稳定在1个月1个小版本的迭代速度。二、Prometheus的特点多维数据模型:由度量名称和键值对标识的时间序列数据时序数据,是在一段时间内通过重复测量(measurement)而获得的观测值的集合;将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴;服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据;1.内置时间序列(pimeseries)数据库:Prometheus;外置的远端存储通常会用:InfluxDB、openTsDB等2.promQL一种灵活的查询语言,可以利用多维数据完成复杂查询3.基于HTTP的pull(拉取)方式采集时间序列数据4.同时支持PushGateway组件收集数据5.通过服务发现或者静态配置,来发现目标服务对象6.支持作为数据源接入Grafana三、Prometheus优势易于管理:Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等);唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。强大的查询语言PromQL:Prometheus内置一个强大的数据查询语言PromQL,通过PromQL可以实现对监控数据的查询、聚合。同时PromQL也被应用于数据可视化(如Grafana)以及告警中。高效:对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而Prometheus可以高效的处理这些数据。可扩展:Prometheus支持联邦集群,可以让多个Prometheus实例产生一个逻辑集群;当单实例Prometheus处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展。易于集成:目前官网提供了多种语言的客户端SDK,基于这些SDK可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成。可视化:PrometheusServer自带一个UI,通过这个UI可以方便对数据进行查询和图形化展示;同时还可以对接Grafana可视化工具展示精美监控指标。四、服务注册被监控服务在Prometheus中是一个Job存在,被监控服务的所有实例在Prometheus中是一个target的存在,所以被监控服务的注册就是在Prometheus中注册一个Job和其所有的target,这个注册分为:静态注册动态注册静态注册:静态的将服务的IP和抓取指标的端口号配置在Prometheusyaml文件的scrape_configs配置下scrape_configs: -job_name:"prometheus"  static_configs:  -targets:["localhost:9090"]以上就是注册了一个名为prometheus的服务,这个服务下有一个实例,暴露的抓取地址是localhost:9090 动态注册:动态注册就是在Prometheusyaml文件的scrape_configs配置下配置服务发现的地址和服务名,Prometheus会去该地址,根据你提供的服务名动态发现实例列表,在Prometheus中,支持consul,DNS,文件,K8s等多种服务发现机制。基于consul的服务发现:-job_name:"node_export_consul"  metrics_path:/node_metrics  scheme:http  consul_sd_configs:   -server:localhost:8500    services:     -node_exporter我们consul的地址就是:localhost:8500,服务名是node_exporter,在这个服务下有一个exporter实例:localhost:9600五、Prometheus实战教程:监控mysql数据库安装mysql数据库上传mysql安装包到指定目录下,并创建dataetctmplog目录tar-zxvfmysql-5.7.31.tar.gzcdmysql-5.7.31mkdirdataetctmplog上传my.cnf,修改本地路径后、端口号等,进行保存[mysqld]server_id=2binlog_format=Mixedread_rnd_buffer_size=128Mfederatedbasedir=/app/mysql/mysql-5.7.31        ######################重要!按实际目录配置datadir=/app/mysql/mysql-5.7.31/data           #######################重要!按实际目录配置socket =/app/mysql/mysql-5.7.31/tmp/mysql-5308.sock           ##################按安装目录名+sock,统一放置于/tmp下init_connect='SETcollation_connection=utf8_general_ci'init_connect='SETNAMESutf8'character-set-server=utf8collation-server=utf8_general_ciskip-character-set-client-handshakelower_case_table_names=1max_connections=1000wait_timeout=180sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESport=5308           #######################重要!按实际目录配置#skip-grant-tables#default_authentication_plugin=mysql_native_passwordtmp_table_size=512Mevent_scheduler=1join_buffer_size=512Mlog_bin_trust_function_creators=1read_rnd_buffer_size=32Msort_buffer_size=64Minnodb_buffer_pool_size=2048Minnodb_log_file_size=64Minnodb_file_per_table=1innodb_flush_log_at_trx_commit=1innodb_log_buffer_size=256Mkey_buffer_size=256Mread_buffer_size=32Mmax_allowed_packet=100Mmax_heap_table_size=256M#binlog_expire_logs_seconds=432#query_cache_size=512M`[client]default-character-set=utf8port=5308               #################################根据实际修改[mysql]default-character-set=utf8[mysql.server]user=mysql               #############################在哪个用户下安装就是哪个log-err#loglog-slow-querieslog-update
  • 所需E币: 0
    时间: 2024-1-9 14:40
    大小: 2.77KB
    在现如今的信息化时代,相信各位读者对于“操作系统”这四个字并不陌生。例如我们常常使用的Windows、安卓、IOS、MacOS以及Linux等,都属于操作系统。操作系统,是现如今信息化时代中不可或缺的一种软件。Linux操作系统是一种开源的、基于Unix的操作系统。它最初由芬兰计算机科学家LinusTorvalds在1991年开发,并得到了全球范围内广泛的应用和支持。Linux操作系统具有稳定性、安全性、可靠性和灵活性等特点,广泛应用于服务器领域,也被许多个人用户选择作为他们的主要操作系统。Linux提供了丰富的命令行工具和图形界面,支持各种编程语言和软件开发环境,是一个非常强大而且自由开放的操作系统。操作系统是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合,操作系统是计算机系统中最基本的系统软件。操作系统(OperatingSystem,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。下面我们进行代码实战,让大家更深入的理解操作系统的本质:<divclass="site-content__wrapper">  <mainclass="site-content"    :class="{'site-content--tabs':$route.meta.isTab}">    <el-tabsv-if="$route.meta.isTab"      v-model="siteContent.mainTabsActiveName":closable="true"      @tab-click="selectedTabHandle"      @tab-remove="removeTabHandle">      <el-tab-panev-for="iteminsiteContent.mainTabs"        :label="item.title":name="item.name">        <el-card:body-style="siteContent.siteContentViewHeight">          <router-view:key="router.currentRoute.value.query.random"/>        </el-card>      </el-tab-pane>    </el-tabs>    <el-cardv-else:body-style="siteContent.siteContentViewHeight">      <router-view:key="router.currentRoute.value.query.random"/>    </el-card>  </main></div>在框架页面的模型层中,定义removeTabHandle()封装函数。functionremoveTabHandle(tabName){  //让mainTabs数组剔除要关闭的Tab  siteContent.mainTabs=siteContent.mainTabs.filter(item=>item.name!==tabName);  //如果还存在剩余的Tab,就切换到最后的Tab上面  if(siteContent.mainTabs.length>=1){    //获取mainTabs数组最后一个元素    lettab=siteContent.mainTabs[siteContent.mainTabs.length-1];    //选中这个Tab控件    siteContent.mainTabsActiveName=tab.name;    //内容区切换引用的页面    router.push({name:tab.name});  }else{    siteContent.mainTabsActiveName='';    router.push({name:'MisHome'});  }}这个注解会拦截Web方法的请求,让SaToken验证客户端提交的Token令牌。如果令牌合法就允许调用Web方法,反之就拒绝HTTP请求,返回401状态码。@RestController@RequestMapping("/mis/user")publicclassUserController{  ……     @GetMapping("/searchUserSummary")  @SaCheckLogin  publicRsearchUserSummary(){    ……  }}在user.vue页面中,添加<el-dialog>标签,它可以实现弹窗的效果。<selectid="searchUsernameById"parameterType="int"resultType="String">  SELECTusername  FROMtb_user  WHEREid=#{userId}</select><updateid="updatePassword"parameterType="Map">  UPDATEtb_user  SETpassword=#{newPassword}  WHEREid=#{userId}   ANDpassword=#{password}</update>在com.example.his.api.mis.service.impl包UserServiceImpl.java类中,实现抽象方法。@ServicepublicclassUserServiceImplimplementsUserService{  ……  @Override  publicintupdatePassword(Mapparam){    intuserId=MapUtil.getInt(param,"userId");    Stringusername=userDao.searchUsernameById(userId);    MD5md5=MD5.create();    Stringpassword=MapUtil.getStr(param,"password");    Stringtemp=md5.digestHex(username);    StringtempStart=StrUtil.subWithLength(temp,0,6);    StringtempEnd=StrUtil.subSuf(temp,temp.length()-3);    password=md5.digestHex(tempStart+password+tempEnd).toUpperCase();    param.replace("password",password);    StringnewPassword=MapUtil.getStr(param,"newPassword");    newPassword=md5.digestHex(tempStart+newPassword+tempEnd).toUpperCase();    param.replace("newPassword",newPassword);    introws=userDao.updatePassword(param);    returnrows;  }}在com.example.his.api.mis.controller包UserController.java类中,声明Web方法。@RestController@RequestMapping("/mis/user")publicclassUserController{  ……  @PostMapping("/updatePassword")  @SaCheckLogin  publicRupdatePassword(@Valid@RequestBodyUpdatePasswordFormform){    intuserId=StpUtil.getLoginIdAsInt();    HashMapparam=newHashMap(){{      put("userId",userId);      put("password",form.getPassword());      put("newPassword",form.getNewPassword());    }};    introws=userService.updatePassword(param);    returnR.ok().put("rows",rows);  }}
  • 所需E币: 0
    时间: 2023-11-10 16:42
    大小: 1018.5KB
    上传者: Argent
    第18讲shell脚本入门
  • 所需E币: 0
    时间: 2023-11-10 12:30
    大小: 3.28MB
    上传者: 丙丁先生
    CW32系列微控制器软件开发工具入门Rev1.0.pdf
  • 所需E币: 0
    时间: 2023-11-9 10:56
    大小: 3.28MB
    上传者: 丙丁先生
    CW32系列微控制器软件开发工具入门.pdf
  • 所需E币: 0
    时间: 2023-10-8 21:49
    大小: 1023.17KB
    上传者: zhusx123
    RA2E1快速入门指南
  • 所需E币: 0
    时间: 2023-8-29 09:03
    大小: 1.17KB
    React是用于构建用户界面的JavaScript库,起源于Facebook的内部项目,该公司对市场上所有JavaScriptMVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。React有两个主要的特点:简单简单的表述任意时间点你的应用应该是什么样子的,React将会自动的管理UI界面更新当数据发生变化的时候。声明式在数据发生变化的时候,React从概念上讲与点击了F5一样,实际上它仅仅是更新了变化的一部分而已。为什么使用React?传统方法频繁操作DOM,性能无法达到要求;React使用VDOM,性能高传统JS代码维护成本高,React基于组件开发需要支持移动端开发[11章]2023React18系统入门进阶实战《欢乐购》带你系统构建React18技术体系,并结合“欢乐购”项目,快速积累企业级前端项目实战经验,落地React18与TypeScript结合的实用开发技巧。react里是通过tag来区分vdom类型的,比如HostComponent就是元素,HostText就是文本,FunctionComponent、ClassComponent就分别是函数组件和类组件。react是通过setState的api触发状态更新的,更新以后就重新渲染整个vdom。而vue是通过对状态做代理,get的时候收集以来,然后修改状态的时候就可以触发对应组件的render了。
  • 所需E币: 3
    时间: 2023-8-12 19:43
    大小: 524.79KB
    上传者: 墨轩溟宇
    元件库的制作做布置元件的准备元件的布置