- 博客(73)
- 收藏
- 关注
原创 创建多个线程、数据共享问题分析与案例代码
在实际的工作中,可能要创建的线程不止一个,也许有多个。所以,这里展示一下创建多个线程的一种写法,大家可以举一反三。在的上面位置,书写线程入口函数myprint在mainjoindetachthreadthread。
2023-02-06 23:58:46
332
原创 线程传参详解、detach坑与成员函数作为线程函数
如果传递int这种简单类型参数,建议都使用值传递,不要使用引用类型,以免节外生枝。如果传递类对象作为参数,则避免隐式类型转换(例如把一个char *转成string,把一个int转成类A对象),全部都在创建线程这一行就构建出临时对象来,然后线程入口函数的形参位置使用引用来作为形参(如果不使用引用可能在某种情况下会导致多构造一次临时类对象,不但浪费,还会造成新的潜在问题,后面会演示)。这样做的目的无非就是想办法避免主线程退出导致子线程对内存的非法引用。建议不使用detach,只使用join。
2023-01-31 23:37:59
409
原创 C++多线程(并发、进程、线程的基本概念和综述)
和多进程并发比较来讲,多线程并发的优缺点如下。优点:线程启动速度更快,更轻量级;系统资源开销更少;执行速度更快。缺点;使用起来有一定难度,要小心处理数据的一致性问题。
2023-01-10 23:24:06
709
原创 常用编程语言应用、前景及学习方法
常用编程语言应用、前景及学习方法常用编程语言应用和前景C语言很多高级语言的鼻祖,个人觉得最大的缺点是:他是一门面向过程的语言。主要用于嵌入式等底层领域C++带面向对象的C语言,运行速度快,有人曾说:Python什么都可以干,其实C++也不例外,而且运行效率比Python高很多,但是吧,C++的入门门槛不是一般的高呀。JavaJava是在C++的基础上演变而来,可以认为Java是轻量款的C++,但是Java舍弃了C++里面很多复杂的概念,比如:指针主要应用移动开发,可移植性强,也可做后端开发,
2022-04-29 00:28:16
2198
原创 Vim插件管理插件Vim-plug
Vim/Neovim插件管理Vim-plugVim是一款古老但不过时,强大但让人望而却步的编译器Vim是上世纪的编译器,但是随着时代的发展,Vim现在依然受广大程序员的喜爱Vim现在依旧受广大程序员喜爱的原因之一就是他又非常多、非常强大的插件,但是Vim的插件需要插件来安装。没错,就是用Vim插件来安装Vim插件,今天主要给大家介绍一个管理Vim插件的插件Vim-plug虽然现在Vim和Neovim都开始自带插件管理功能,但一个插件管理器会让你安装以及升级vim插件的过程变得更加方便快捷。安装vi
2022-04-18 00:30:18
2688
原创 上古神器Vim
玩转Vim世界上10种人,会Vim的和不会Vim的初识Vim,想说声爱你以很久开始编辑输入i(insert)进入编辑模式,开始输入文字i表示在当前字符的后一个位置插入a表示在当前字符的前一个位置插入o表示在当前字符所在行的下一行插入I表示在当前字符所在行的最后一个位置插入A表示在当前字符所在行的第一个位置插入O表示在当前字符所在行的上一行插入:w保存当前文件:q退出当前文件:wq保存并退出当前文件:h option-list查看设置缩写esc回到正常(normal)模式V
2022-04-17 23:50:38
1656
原创 Java:GUI编程
文章目录GUI编程AWT一、AWT介绍二、组件和容器(Component和Container)2.1.Frame2.2.Panel三、布局管理器3.1.第一种布局管理器——FlowLayout3.2.第二种布局管理器——BorderLayout3.3.第三种布局管理器——GridLayout(表格布局管理器)3.4.布局练习四、布局管理器总结五、事件监听六、TextField事件监听七、内部类八、Graphics类九、鼠标事件适配器十、window事件十一、键盘响应事件Swing一、常用窗体1. JFram
2022-04-15 16:59:36
2822
原创 Java:IO流
IO流什么是IO流I:InputO:Output通过IO可以完成硬盘文件的读和写IO流的分类1.按照流的方式进行分类输入流(InputStream):往内存中去,叫输入(Input),或者叫做读(Read)。输出流(OutputStream):从内存中出来,叫输出(Output),或者叫做写(Write)。2.按照读取数据的方式进行分类按字节的方式读取数据:一次读取1个字节byte,等于一次读取8个二进制。这种流是万能的,什么类型都可以读取。包括:文本文件、图片、声音、
2022-04-01 10:23:35
641
原创 Java异常
Java异常异常概念说成人话就是bug异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据。要打开的文件不存在。网络通信时连接中断,或者JVM内存溢出。这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:**检查时异常:**最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如:要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简
2022-03-30 15:43:13
539
原创 配置jdk1.7
配环境变量、配环境变量、配环境变量(重要的事说三遍)什么是环境变量?请看我这篇博客程序猿的第一步——环境变量在D盘下建一个JDK的文件夹,一会儿用来存放jdk-17(当然不管哪个盘都可以)一、找到你下载的jdk的路径二、安装jdk双击jdk-17_windows-x64_bin.exe,点是等一会出现如下界面,不要点下一步、不要点下一步、不要点下一步接下来最关键的一步,该路径点击更改更改的路径如下改的路径必须记住,改的路径必须记住,改的路径必须记住重要的事说三遍点下一步
2022-02-26 19:18:38
1152
原创 学生管理系统(C语言)
说明:本程序的基本功能由单链表实现,满足基本的增删改查等功能,包括对文件的读写。由于测试数据较少,项目的鲁棒性可能不是很好。基本功能退出输入成绩计算每名学生加权平均成绩计算每门课程平均分按分数降序排列按学号升序排序按姓名在字典中排序学号检索按名字查找删除学生的信息统计分析打印学生分数写入文件从文件中读取下步改进:测试边缘数据或者增加测试数据,提高代码鲁棒性连接数据库,提高效率,更直观的观察数据
2022-02-23 01:02:23
427
原创 目标检测算法(YOLOv4)
目标检测算法(yolov4)本文要来介绍很火的目标检测算法YOLOv4,该算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化.论文题目:YOLOv4: Optimal Speed and Accuracy of Object Detection主要贡献YOLOv4在YOLOv3上各个部分做改进,在保证速度的同时,大幅提高了模型的检测精度,并降低硬件使用的要求.由上图可以看出:Y
2022-02-20 00:23:11
5266
原创 目标检测算法(YOLOv3)
目标检测算法(YOLOv3)YOLOv3在YOLOv2的基础上,改良了网络的主干,利用多尺度特征图进行检测,改进了多个独立的Logistic regression分类器来取代softmax来预测类别分类.论文题目:YOLOv3: An Incremental Improvement主干网络YOLOv3提出了新的主干网络: Darknet-53 ,从第0层到第74层,一共有53层卷积层,其余均为Resnet层.和Darknet-19相比,Darknet-53去除了所有的maxpooling层,增加
2022-02-18 23:45:00
9242
原创 目标检测算法(YOLOv2)
目标检测算法(YOLOv2)YOLO在YOLOv1的基础上做了不少的改进,其中在VOC2007数据集上的map由63.4提升到78.6,并且保持检测速度.从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进.论文题目:YOLO9000: Better, Faster, StrongerYOLOv2在YOLOv1的改进点使用BN层作者在每层卷积的后面都加入了BN层,不再使用dropout,采用该策略后,mAP提升了2.4%BN层可以提升模
2022-02-18 00:32:55
725
原创 目标检测算法(YOLOv1)
目标检测算法(YOLOv1)论文题目:You Only Look Once: Unified, Real-Time Object Detection网络架构YOLOv1的模型架构参考GoogleNet,一共有24个卷积层,2个全连接层,激活函数为Leaky ReLU,最后一次则是采用Linear activation.整体网络架构图如下所示:检测流程YOLO 的整体处理流程如下:将图像resize成448X448,并分割成7X7的网格输入整张图像至CNN model,提取其特征并进行网络
2022-02-16 23:36:38
1654
原创 目标检测基础(NMS)
目标检测基础(NMS)什么是非最大值抑制非最大值抑制是一种主要用于目标检测的技术,旨在从一组重叠框中选择最佳边界框。在下图中,非最大值抑制的目的是删除黄色和蓝色框,这样我们只剩下绿色框作为最终的预测结果。计算NMS的步骤为了了解什么是boundingbox,以及IOU的含义,我在前篇发表了关于IOU的文章。前篇文章中描述的术语将在本文中继续介绍。我们首先描述NMS在这个特定示例中的工作过程,然后解释一个更通用的算法,将其扩展到不同的场景下。1、术语定义我们将使用的每个边界框的格式如下:b
2022-02-15 23:32:35
2582
原创 目标检测基础(IoU)
目标检测基础(IoU)什么是IOU?IOU(交并比 Intersection over Union)是一个术语,用于描述两个框的重叠程度。重叠区域越大,IOU越大。IOU主要用于与对象检测相关的应用程序中,在该应用程序中,我们训练模型输出一个完全包围目标的外接矩形框。例如,在上图中,我们有一个绿色框和一个蓝色框。绿色框表示真实框,蓝色框表示我们模型的预测框。训练模型的目的是不断改进其预测框的输出,直到蓝色框和绿色框完全重叠,即两个框之间的IOU等于1。IOU经常用于非最大值抑制中,基于检测框的置信
2022-02-15 00:03:38
900
原创 零基础使用paddlepaddle搭建LeNet-5网络
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算的前馈神经网络,是基于图像任务的平移不变性(图像识别的对象在不同位置有相同的含义)设计的,擅长应用于图像处理等任务。一、卷积神经网络简介在图像处理中,图像数据具有非常高的维数(高维的RGB矩阵表示),因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。对于高维图像数据,卷积神经网络利用了卷积和池化层,能够高效提取图像
2022-02-13 23:34:41
661
原创 深度学习中的各种卷积
深度学习中的各种卷积一、卷积与互相关在信号处理、图像处理和其它工程/科学领域,卷积都是一种使用广泛的技术。在深度学习领域,卷积神经网络(CNN)这种模型架构就得名于这种技术。但是,深度学习领域的卷积本质上是信号/图像处理领域内的互相关(cross-correlation)。这两种操作之间存在细微的差别。无需太过深入细节,我们就能看到这个差别。在信号/图像处理领域,卷积的定义是:(f∗g)(t)=∫−∞∞f(τ)g(t−τ)(f*g)(t)=\int_{-\infty}^{\infty}f(\tau)g
2022-02-12 23:45:02
4194
原创 链式法则(Chain rule)
Chain rule>>> x=torch.tensor(1.)>>> w1=torch.tensor(2.,requires_grad=True)>>> b1=torch.tensor(1.)>>> w2=torch.tensor(2.,requires_grad=True)>>> b2=torch.tensor(1.)>>> y1=x*w1+b1>>> y2=y1
2022-02-11 23:42:51
743
原创 感知机(Perceptron)
感知机单一输出感知机Perceptron>>> x=torch.randn(1,10)>>> w=torch.randn(1,10,requires_grad=True)>>> o=torch.sigmoid(x@w.t())>>> o.shapetorch.Size([1, 1])>>> loss=F.mse_loss(torch.ones(1,1),o)>>> loss.sha
2022-02-10 23:40:17
83
原创 LOSS及其梯度
LOSS及其梯度Typical LossMean Squared Error(MSE)Derivativeautograd.grad>>> x=torch.ones(1)>>> w=torch.full([1],2.)>>> mse=F.mse_loss(x*w,torch.ones(1))>>> msetensor(1.)>>> torch.autograd.grad(mse,[w])Tra
2022-02-09 23:58:03
1965
原创 激活函数及其梯度
激活函数及其梯度sigmoidDerivative>>> a=torch.linspace(-100,100,10)>>> atensor([-100.0000, -77.7778, -55.5556, -33.3333, -11.1111, 11.1111, 33.3333, 55.5556, 77.7778, 100.0000])>>> torch.sigmoid(a)tensor([0.0
2022-02-08 23:41:14
528
原创 Tensor高阶OP
高阶OPwhereexample>>> condtensor([[0.1251, 0.6173], [0.8600, 0.1675]])>>> atensor([[0., 0.], [0., 0.]])>>> btensor([[1., 1.], [1., 1.]])>>> torch.where(cond>0.5,a,b)tensor([[1., 0.],
2022-02-07 23:51:43
98
原创 Tensor的统计属性
统计属性norm-p>>> a=torch.full([8],1.)>>> b=a.view(2,4)>>> c=a.view(2,2,2)>>> btensor([[1., 1., 1., 1.], [1., 1., 1., 1.]])>>> ctensor([[[1., 1.], [1., 1.]], [[1., 1.], [1.
2022-02-06 23:37:17
1321
原创 Tensor的基本运算
基本运算Add/minus/multiply/divide>>> a=torch.rand(3,4)>>> b=torch.rand(4)>>> a+btensor([[1.5473, 0.8469, 1.3391, 0.4954], [1.8049, 1.5318, 1.4299, 0.6006], [1.1770, 1.3373, 0.7201, 1.2777]])>>> torch.ad
2022-02-05 23:50:58
339
原创 Tensor的合并与分割
合并与分割Cat>>> a=torch.rand(4,32,8)>>> b=torch.rand(5,32,8)>>> torch.cat([a,b],dim=0).shapetorch.Size([9, 32, 8])for example>>> a1=torch.rand(4,3,32,32)>>> a2=torch.rand(5,3,32,32)>>> torch.cat(
2022-02-04 23:59:54
776
原创 Tensor的维度变换
维度变换OperationView/reshape>>> a=torch.rand(4,1,28,28)>>> a.shapetorch.Size([4, 1, 28, 28])>>> a.view(4,28*28)tensor([[0.1881, 0.6594, 0.4549, ..., 0.5385, 0.8488, 0.4619], [0.7678, 0.0459, 0.3048, ..., 0.0318, 0.7
2022-02-03 23:43:14
2401
原创 Tensor的索引与切片
索引与切片Indexing>>> a=torch.rand(4,3,28,28)>>> a[0].shapetorch.Size([3, 28, 28])>>> a[0,0].shapetorch.Size([28, 28])>>> a[0,0,2,4]tensor(0.5978)select first/last N>>> a.shapetorch.Size([4, 3, 28, 28])&
2022-02-02 23:39:54
280
原创 创建Tensor
创建TensorImport from numpy>>> import numpy as np>>> import torch>>> a=np.array([2,2.3])>>> torch.from_numpy(a)tensor([2.0000, 2.3000], dtype=torch.float64)>>> a=np.ones([2,3])>>> torch.from_numpy
2022-02-02 01:02:28
100
原创 利用PyTorch进行完整的模型训练
完整的模型训练import torchvisionfrom torch.utils.tensorboard import SummaryWriterfrom model import *# 准备数据集from torch import nnfrom torch.utils.data import DataLoadertrain_data = torchvision.datasets.CIFAR10(root = "../dataset", train = True, transform =
2022-01-30 23:44:08
701
原创 PyTorch现有网络模型的使用和修改
PyTorch现有网络模型的使用和修改import torchvision# train_data = torchvision.datasets.ImageNet("dataset", split = 'train', download = True,# transform = torchvision.transforms.ToTensor())from torch import nnvgg16_false
2022-01-30 00:59:10
1812
原创 PyTorch搭建小实践
PyTorch搭建小实践import torchfrom torch import nnfrom torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequentialfrom torch.utils.tensorboard import SummaryWriterclass Model(nn.Module): def __init__(self): super(Model, self).__init__()
2022-01-28 23:52:09
1423
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人