自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(309)
  • 收藏
  • 关注

原创 Java并发编程(26)—— Unsafe类的源码解读以及使用场景

堆外是相对于JVM的内存来说的,通常我们应用程序运行后,创建的对象均在JVM内存中的堆中,堆内存的管理是JVM来管理的,而堆外内存指的是计算机中的直接内存,不受JVM管理。相比C和C++的开发人员,作为一名Java开发人员是十分幸福的,因为在Java中程序员在开发时不需要关注内存的管理,对象的回收,因为JVM全部都帮助我们完成了。对于Java中并发编程,Java的源码里面存着这大量的Unsafe类的使用,主要使用的是和CAS操作相关的三个方法,所以搞清楚这三个方法,对看懂Java并发编程的源码有很大帮助。

2024-09-09 16:05:07 325

原创 Java并发编程(24)—— JUC并发编程类库详解

CyclicBarrier 是一个同步辅助类,用于让一组线程到达一个屏障(barrier)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。这意味着在修改操作发生时,会创建一个新的数组,并将现有的所有元素复制到新数组中,然后在新数组上进行修改。这意味着在修改操作发生时,会创建一个新的数组,然后将现有的所有元素复制到新数组中,并在新数组上进行修改。当一个线程到达交换点时,它会调用 exchange() 方法,该方法会尝试将该线程的数据与另一个线程的数据交换。

2024-09-03 18:53:37 264

原创 Java并发编程(23)—— Volatile在并发编程中的应用

它是CPU或编译器在内存随机访问操作中的一个同步点,确保此点之前的所有读写操作都执行完毕后,才能开始执行此点之后的操作。内存屏障(Memory Barrier)是一种同步机制,用于防止处理器或编译器对内存操作的指令进行重排序。在Java内存模型(JMM)中,每个线程都有自己的工作内存(也称为本地内存),用于存储共享变量的副本。是Java中的一个关键字,用于修饰变量,特别是那些会被多个线程访问和修改的共享变量。变量,JVM会在其读写过程中插入特定的内存屏障指令,以确保其内存语义的正确实现。

2024-08-30 03:45:00 109

原创 Java并发编程(21)—— Atomic 原子类总结

第一步,因为对象的属性修改类型原子类都是抽象类,所以每次使用都必须使用静态方法 newUpdater()创建一个更新器,并且需要设置想要更新的类和属性。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。基本类型原子类只能更新一个变量,如果需要原子更新多个变量,需要使用 引用类型原子类。

2024-08-30 03:30:00 115

原创 Java并发编程(22)—— CurrentHashMap源码分析

java 并发包中提供的是一个线程安全且高效的HashMap ,也是面试的高频考点。下面将围绕主题:ConcurrentHashMap 如何实现高效地线程安全?以及在Java8中它从设计实现上有哪些演进?这篇文章一开始我以为会比较简单,但是在深入源码分析时,遇到了很大的阻碍,比前面我们分析AQS以及读写锁的源码要难理解的多,断断续续也写了4天了。如果你看完还是没有理解的话,那我在这里表示深深的歉意,同时也欢迎你和我一起沟通。

2024-08-30 03:00:00 143

原创 PyTorch深度学习实战(27)—— PyTorch分布式训练

分布式训练等价于增大了一次训练的batch_size,传统的批标准化仅是对一个batch上的数据进行操作,在分布式训练中不同进程对不同的数据进行操作,相当于每一个进程的BN层处理的batch。在确保每个进程执行的操作没有问题后,可以尝试先在较小的集群上(例如,单个节点启动两个进程,两个节点启动两个进程等)启动分布式训练,以此验证进程间的同步与协作是否出错,这样的操作可以降低复现错误、调试程序的成本。在分布式训练中,不同进程之间需要通信来完成参数的汇总更新,因此进程间的同步是至关重要的。

2024-08-29 15:45:55 660

原创 PyTorch深度学习实战(26)—— PyTorch与Multi-GPU

至此,网络完成了一次反向传播,网络参数仅在GPU-0上进行更新。在上述流程中,只需要GPU-0将数据与模型加载至多块GPU上,各GPU就可以并行地进行前向传播与反向传播,也就是说并行中的一个epoch完成了单个GPU多个epoch的工作,从而加速了模型的训练。非阻塞通信可以将进程本身的计算时间与进程间的通信时间重叠起来,即在完成计算的同时,交由特定的通信模块完成通信部分。不难发现,在MPI的帮助下,不同进程之间的通信是比较容易的,因此读者应该侧重于理解分布式计算的思想,并将该思想应用在实际的程序设计当中。

2024-08-29 15:39:11 475

原创 MySQL慢查询日志使用与分析

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。由慢查询日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒钟的SQL,结合之前explain进行全面分析。1.慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来。

2024-08-28 09:18:59 486

原创 Java并发编程(20)—— ConcurrentHashMap详解

需要高效的并发性能:相对于 Hashtable 或者 Collections.synchronizedMap() 等同步的哈希表实现,ConcurrentHashMap 在高并发情况下有更好的性能表现。1.锁的颗粒度更小,当数据落在数组上时,使用cas锁头节点,当发生冲突时数据落在节点上时,使用synchronized锁冲突的节点减少了并发冲突。ConcurrentHashMap是Java并发很重要的组件,也是大厂面试经常考察的对象,下面我就全面来详解ConcurrentHashMap。

2024-08-22 04:15:00 85

原创 Java并发编程(19)—— CompletableFuture异步多线程

crud系统真的很少用,一般其实都是中间件类的系统会大量的运用并发编程的知识,各种请求都是异步化的执行,比如说大家可以去看看rocketmq、elasticsearch这一类中间件的源码,他们会经常用到。或者说大家在自己公司里研发一些非crud类的系统,比如说一些公司内自研的一些底层系统,基础系统,中间件系统,其实也会经常用到并发编程,也就是异步编程的模式,那如果大家未来有可能用到异步编程的话,建议还是来了解一下今天的知识点,因为传统的异步编程其实控制你开的那个线程其实真的很麻烦。

2024-08-22 03:45:00 149

原创 Java并发编程(18)—— 常用并发工具类

生产者线程将元素放入队列,消费者线程从队列中取元素,队列为空时消费者线程阻塞。让一组线程到达一个共同的同步点,然后一起继续执行。是一个线程安全的队列,支持阻塞操作,适用于生产者-消费者模式。控制访问资源的线程数,可以用来实现限流或访问控制。适用于需要所有线程在某个点都完成后再继续的场景。适用于主线程需要等待多个子线程完成任务的场景。是一个线程安全且高效的哈希表,支持并发访问。在资源有限的情况下,控制同时访问的线程数量。适用于需要频繁对数值进行无锁操作的场景。一个线程(或多个)等待其他线程完成操作。

2024-08-21 09:24:06 63

原创 PyTorch深度学习实战(25)—— 使用向量化思想解决实际问题

显然,这里需要在左上角和右下角坐标值的基础上构造出$n \times n$ 的结果,然后对feature map进行整数数组索引,从而得到一个$C \times N \times n \times n$ 的结果,最后相乘便完成了ROI Align操作。本文通过三个示例说明了向量化思想在实际场景中的应用,读者应该仔细体会其中的向量化思想,并在解决实际问题时尝试使用向量化思想进行编程,从而提高程序的运行效率。将上一步得到的量化RoI特征进一步细化为量化的空间单元(bin),也就是对每一个单元的边界进行量化。

2024-08-21 04:45:00 471

原创 PyTorch深度学习实战(24)—— 爱因斯坦操作einsum 和 einops

爱因斯坦操作凭借其便捷、直观的特点,在视觉Transformer中得到了广泛的应用,下面以Vision Transformer(ViT)在很多网络结构中,需要提取通道间或者空间像素之间的信息,从而完成通道的部分维度和空间的部分维度之间的转化。注意: 对于res1和res2,虽然它们的shape一样,但是由于提取维度时的顺序不一样,它们的数值并不相同。进行维度间的相互转化时,一定要注意维度的顺序,如果提取的顺序有误,那么无法得到正确的目标结果。除了上面介绍的爱因斯坦求和,其他的爱因斯坦操作都封装在。

2024-08-21 03:00:00 457

原创 PyTorch深度学习实战(23)—— 用高级索引实现卷积

根据卷积的定义,只需要遍历整个图像,依次获取与卷积核相乘的子块,相乘求和后就可以得到卷积的结果。卷积运算还可以从整数数组索引的角度考虑,根据卷积的计算公式,在确定了输入形状和卷积核大小后,输出的Tensor形状也就固定了。本文介绍了一些特殊的索引操作:整数数组索引与布尔数组索引,灵活的运用这些索引操作可以有效地完成数据的变形与转换。的思路,将整张图像提前转换成与卷积核相乘的子块,再把每个子块的维度展平,此时形状从。从上面的示例可以看出,通过整数数组索引完成的卷积操作,它的结果与使用。命令就能得到最终结果。

2024-08-20 00:45:00 249

原创 PyTorch深度学习实战(22)—— 高级索引

从上面的例子可以看出,整数数组索引的机制就是先将索引数组对应位置的数字,组合成源Tensor实例的索引,再根据索引值和Tensor的size、storage_offset和stride属性计算出Storage空间上的真实索引,最后返回结果。当索引数组的个数N等于Tensor的维度数tensor.ndim时,索引输出的形状等价于index的形状(index.shape),输出的每一个元素等价于。,那么直接将所有高级索引所在区域的维度转换成高级索引的维度,Tensor的其他维度按照基本索引正常计算。

2024-08-20 00:15:00 178

原创 PyTorch深度学习实战(21)—— 索引操作

4.None索引索引和切片是NumPy和PyTorch中的两种常用操作,本文将从基本索引入手帮助读者建立向量化思想。1.基本索引PyTorch中Tensor的索引和NumPy数组的索引类似,通过索引操作可以定位到数据的具体位置,也可以进行切片操作。基本索引有以下几种形式。元组序列:在索引中直接使用一个元组序列对Tensor中数据的具体位置进行定位,也可以直接使用多个整数(等价于元组序列省略括号的形式)代替。切片对象(Slice Object):在索引中常见的切片对象形如。

2024-08-19 00:45:00 245

原创 PyTorch深度学习实战(20)—— 向量化计算和广播法则

在日常编程中读者应该养成向量化的编程习惯,避免对较大的Tensor进行逐元素的遍历操作,从而提高程序的运行效率。向量化计算是指对不同的数据执行同样的一个或一批指令,或者把指令应用到一个数组或向量上,从而将多次循环操作变成一次计算。广播法则(broadcast)是科学计算中经常使用的一个技巧,它在快速执行向量化计算的同时不会占用额外的内存/显存。两个数组要么在某一个维度的尺寸一致,要么其中一个数组在该维度的尺寸为1,否则不符合广播法则的要求。会将相同的数据复制多份,因此会占用额外的空间。

2024-08-19 00:15:00 178

原创 PyTorch深度学习实战(19)—— 使用GPU加速:CUDA

幸运的是,PyTorch封装了相应的接口,可以用简单的几行代码实现分布式训练。然而,如果要保证同样的代码在不同配置的机器上均能运行,那么编写设备兼容的代码是至关重要的,本节将详细介绍如何编写设备兼容的代码。在一些实际应用场景下,代码的可移植性是十分重要的,读者可根据上述内容继续深入学习,在不同场景中灵活运用PyTorch的不同特性编写代码,以适应不同环境的工程需要。在进行低精度的计算时,可以考虑使用HalfTensor,它相比于FloatTensor可以节省一半的显存,但是需要注意数值溢出的情况。

2024-08-18 01:45:00 98

原创 PyTorch深度学习实战(18)—— 可视化工具

同时,TensorBoard是一个相对独立的工具,只要用户保存的数据遵循相应的格式,TensorBoard就能读取这些数据,进行可视化。在PyTorch 1.1.0版本之后,PyTorch已经内置了TensorBoard的相关接口,用户在手动安装TensorBoard后便可调用相关接口进行数据的可视化,TensorBoard的主界面如下图所示。Visdom十分轻量级,支持非常丰富的功能,可以胜任大多数的科学运算可视化任务,它的可视化界面如下图所示。命令将服务放至后台运行。

2024-08-18 00:15:00 273

原创 PyTorch深度学习实战(17)—— 预训练模型

中,包括经典的分类模型:VGG、ResNet、DenseNet及MobileNet等,语义分割模型:FCN及DeepLabV3等,目标检测模型:Faster RCNN以及实例分割模型:Mask RCNN等。如图所示,Mask RCNN能够分割出该图像中的部分实例,读者可考虑对预训练模型进行微调,以适应不同场景下的不同任务。注意:上述代码均在CPU上进行,速度较慢,读者可以考虑将数据与模型转移至GPU上。需要注意的是转换分为两步,第一步:构建转换操作,例如。除了加载数据,并对数据进行预处理之外,

2024-08-17 00:30:00 116

原创 PyTorch深度学习实战(16)—— 数据处理工具

最后1个batch的batch_size也为1,这是因为共有9张(包括损坏的文件)图片,无法整除2(batch_size),所以最后一个batch的样本数目小于batch_size。然而,在训练神经网络时,一次处理的对象是一个batch的数据,同时还需要对一批数据进行打乱顺序和并行加速等操作。相比于丢弃异常图片而言,这种做法会更好一些,它能保证每个batch的样本数目仍然是batch_size,但是在大多数情况下,最好的方式还是对数据进行彻底清洗。函数中会抛出异常,最好的解决方案是将出错的样本剔除。

2024-08-17 00:15:00 179

原创 PyTorch深度学习实战(15)—— nn.Module深入分析

DataParallel并行是将一个batch的数据均分成多份,分别送到对应的GPU进行计算,然后将各个GPU得到的梯度进行累加,与module相关的所有数据也会以浅复制的方式复制多份。下面考虑一种场景:有一个预训练好的模型,需要提取模型的某一层(不是最后一层)的输出作为特征进行分类,但又不希望修改原有模型的定义文件,这时就可以利用钩子函数。在实际使用中可能层层嵌套,即一个module可能包含若干个子module,每一个子module可能包含更多的子module。为了方便用户访问各个子module,

2024-08-16 01:15:00 188

原创 PyTorch深度学习实战(14)—— 使用nn.Module搭建ResNet

ResNet34的网络结构如上图所示,除了最开始的卷积、池化和最后的池化、全连接,网络中有很多结构相似的单元,这些重复单元的共同点就是有个跨层直连的shortcut。另外,Residual Block的大小是有规律的,在最开始的池化之后有连续几个一模一样的Residual Block单元,这些单元的通道数一样。这里将这几个拥有多个Residual Block单元的结构称之为layer(读者需要将这里的layer和之前讲的layer区分开来,这里的layer是几个层的集合)。下面是实现代码,规律总结如下。

2024-08-16 00:30:00 377

原创 PyTorch深度学习实战(12)—— 神经网络工具箱nn.functional

由于激活函数(如ReLU、sigmoid、tanh)、池化(如MaxPool)等层没有可学习参数,可以使用对应的。,它的主要作用是对输入的Tensor进行双线性采样,并将输出变换为用户想要的形状。例如,前面实现的全连接层,就可以将weight和bias两个参数单独拿出来,在构造函数中初始化为。对于不具备可学习参数的层(如激活层、池化层等),可以将它们用函数代替,这样可以不用放置在构造函数。的比较说明,读者可参考PyTorch论坛的相关讨论和说明。函数代替,对于卷积、全连接等具有可学习参数的层,建议使用。

2024-08-15 00:30:00 231

原创 PyTorch深度学习实战(13)—— 神经网络初始化策略和优化器

然而,新建优化器会重新初始化动量等状态信息,这对于使用动量的优化器(如Adam),可能会造成损失函数在收敛过程中出现震荡等情况。在深度学习中参数的初始化十分重要,良好的初始化能让模型更快地收敛,并达到更高水平,糟糕的初始化可能使模型迅速崩溃。中的模块参数都采取了较为合理的初始化策略,用户一般无需再进行设计。读者也可以用自定义的初始化策略来代替系统的默认初始化。返回的是内存中的随机数,很可能会有极大值,这在实际训练网络时会造成溢出或者梯度消失。中,它的设计非常灵活,能够方便地扩展为自定义的优化方法。

2024-08-15 00:30:00 329

原创 PyTorch深度学习实战(11)—— 常用神经网络层

在上面的例子中,每一层的输出基本上都直接成为下一层的输入,这样的网络称为前馈传播网络(Feedforward Neural Network,FFN)。这意味着,如果使用list保存子module,那么在反向传播时无法调整子module的参数,因为子module中的参数并没有加入到主module的参数中。卷积神经网络的本质是卷积层、池化层、激活层以及其他层的叠加,理解卷积层的工作原理是极其重要的。以上例子都是对module的可学习参数直接进行操作,在实际使用中,这些参数一般会随着学习的进行不断改变。

2024-08-14 15:27:46 995

原创 PyTorch深度学习实战(10)—— 神经网络工具箱nn.Module

中,可以将前面自定义的Linear层(module)作为当前module对象的一个子module。在forward函数中,可以加上各层之间的处理函数(如激活函数、数学处理等),并定义层与层之间的关系。其中x表示输入,y表示输出,b表示偏置,W表示全连接层的参数。是一个抽象的概念,既可以表示神经网络中的某个层(layer),又可以表示一个包含很多层的神经网络。全连接层,又名仿射层,它的输出y和输入x满足y = Wx+b ,其中w和b是可学习的参数。使用时,可以将layer看成数学概念中的函数,调用。

2024-08-14 01:45:00 462

原创 Java并发编程(17)—— ThreadLocal 让每个线程拥有自己的变量副本

然而,在一些场景下,我们并不希望数据被多个线程共享,而是希望每个线程都拥有自己独立的一份数据。ThreadLocal 是 Java 中的一个类,它提供了线程本地变量的功能。简单来说,就是为每一个使用该变量的线程提供了一个独立的变量副本。这样一来,每个线程都可以独立地改变自己的副本,而不会影响到其他线程。,gc执行后key引用的对象回收,导致内存泄漏。,那么gc执行后,key的引用仍然存在,仍然无法进行回收,内存泄露仍然存在。不仅简化了多线程编程中的数据管理,还能提高程序的并发性能。类的内部结构比较简单。

2024-08-13 03:15:00 388

原创 PyTorch深度学习实战(9)—— 用autograd实现线性回归

相比于上文的线性回归,利用autograd实现的线性回归不需要手动实现反向传播,可以自动计算微分。这一点不单是在深度学习中,在许多机器学习的问题中都很有用。在上文中讲解了如何利用Tensor实现线性回归,本文将讲解如何利用autograd实现线性回归,读者可以从中体会autograd的便捷之处。需要注意的是,在每次反向传播之前,需要先把梯度值清零,避免累加。

2024-08-12 04:00:00 189

原创 PyTorch深度学习实战(8)—— 自动求导autograd和计算图基础

在这个图中,输入网络的Tensor称为叶子节点,网络输出的Tensor称为根节点。autograd从根节点开始遍历,并对其中所有requires_grad=True的Tensor进行求导操作,这样逐层遍历至叶子节点时,可以通过链式操作计算梯度,从而自动完成反向传播操作。计算图(Computation Graph)是包括PyTorch和TensorFlow在内的许多现代深度学习框架的核心,它为反向传播(Back Propogation)算法提供了计算基础,了解计算图在实际写程序的过程中会有极大的帮助。

2024-08-11 04:15:00 691

原创 PyTorch深度学习实战(7)—— 线性回归

上面提到了Tensor的许多操作,这里不要求读者全部掌握,今后使用时可以再查阅这部分内容或者查阅官方文档,在此读者只需有个基本印象即可。线性回归是机器学习的入门内容,应用十分广泛。线性回归利用数理统计中的回归分析来确定两种或两种以上变量间相互依赖的定量关系,其表达形式为。其中,x和y是输入输出数据,w和b是可学习参数,误差e服从均值为0的正态分布。本文利用随机梯度下降法更新参数w 和b 来最小化损失函数,最终学得w 和b 的数值。可见程序已经基本学出w=2、b=3,并且图中直线和数据已经实现较好的拟合。

2024-08-10 04:45:00 208

原创 PyTorch深度学习实战(6)—— 改变Tensor的形状

在设计上,PyTorch允许一个Tensor是另外一个Tensor的视图(view),这有效避免了显式的数据复制,从而更加高效便捷地进行Tensor的变形、切片等操作。:在调整Tensor的形状时,用户不需要指定每一维的形状,可以把其中一个维度指定为-1,PyTorch会自动计算对应的形状。另外,虽然在大多数情况下转置操作的输出和输入的Tensor共享存储,但是转置操作会使得Tensor变得不连续,此时最好通过。:将Tensor中尺寸为1的维度去掉,例如形状(1, 3, 1, 4)会变为(3, 4)。

2024-08-09 03:30:00 873

原创 PyTorch深度学习实战(5)—— Tensor的命名张量和基本结构

Tensor分为头信息区(Tensor)和存储区(Storage),头信息区主要保存Tensor的形状(size)、步长(stride)、数据类型(type)等信息,真正的数据在存储区保存成连续数组。Tensor的内存地址指向Tensor的头(head),不同Tensor的头信息一般不同,但可能使用相同的Storage。在进行张量的运算时,命名张量可以提供更高的安全性。例如,在进行Tensor的加法时,如果两个Tensor的维度名称没有对齐,那么即使它们的维度相同也无法进行计算。在内存共享方面的区别。

2024-08-08 03:30:00 1133

原创 PyTorch深度学习实战(4)—— Tensor的基本操作

其中,大多数索引操作通过修改Tensor的stride等属性与原Tensor共享内存,即修改了其中一个Tensor,另一个Tensor会跟着改变。HalfTensor是专门为GPU版本设计的,同样的元素个数,HalfTensor的显存占用只有FloatTensor的一半,因此使用HalfTensor可以极大缓解GPU显存不足的问题。用户可以沿着某一维度进行指定的归并操作,例如,加法。的输入对象都是多个Tensor组成的一个序列(如列表、元组等),所有的Tensor在拼接之外的维度必须相同或者可以进行广播。

2024-08-07 03:45:00 1084

原创 PyTorch深度学习实战(3)—— 小试牛刀:CIFAR-10分类

CIFAR-10是一个常用的彩色图片数据集,它有10个类别:airplane、automobile、bird、cat、deer、dog、frog、horse、ship和truck。神经网络训练:以CIFAR-10分类为例,演示了神经网络的训练流程,包括数据加载、网络搭建、模型训练及模型测试。Tensor:类似NumPy数组的数据结构,它的接口与NumPy的接口类似,可以方便地互相转换。拷贝上面的LeNet网络,因为CIFAR-10数据集中的数据是3通道的彩色图像,所以将。

2024-08-06 03:30:00 800

原创 PyTorch深度学习实战(2)——PyTorch快速入门

在forward函数中不仅可以使用Tensor支持的任何函数,还可以使用if、for、print、log等Python语法,写法和标准的Python写法一致。PyTorch的简洁设计使得它易于入门,在深入介绍PyTorch之前,本文先介绍一些PyTorch的基础知识,以便读者能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络。中最重要的类,它可以看作是一个神经网络的封装,包含神经网络各层的定义以及前向传播(forward)方法,通过。如果需要共享内存,那么可以使用。

2024-08-05 17:08:59 1247

原创 PyTorch深度学习实战(1)——PyTorch安装与配置

同时,VS Code提供了十分丰富的插件,来提高用户的开发效率,例如Python(用于代码调试、变量检测等)、Remote-SSH(用于连接远程服务器)、Jupyter(用于加载Jupyter Notebook)等。魔术方法,还可以直接粘贴多行代码、doctest代码和IPython的代码(下面的代码都是使用“Ctrl+V”直接粘贴的,如果是Linux终端,那么应该使用“Ctrl+Shift+V”直接粘贴,或者单击鼠标右键,选择"粘贴"选项)。在这种开发模式下,代码启动更快,读取远程数据也更方便。

2024-08-05 17:03:01 770

原创 Leetcode算法题总结6-树

一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。平衡树左右子树高度差都小于等于 1。3 两节点的最长路径。

2024-08-02 22:56:04 222

原创 Leetcode算法题总结5-数组和矩阵

题目描述:S[i] 表示一个集合,集合的第一个元素是 A[i],第二个元素是 A[A[i]],如此嵌套下去。题目描述:数组的度定义为元素出现的最高频率,例如上面的数组度为 3。让前 k+1 个元素构建出 k 个不相同的差值,序列为:1 k+1 2 k 3 k-1 ... k/2 k/2+1.6. 一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出重复的数和丢失的数。n 的整数,要求构建数组,使得相邻元素的差值不相同的个数为 k。主要思想是通过交换数组元素,使得数组上的元素在正确的位置上。

2024-08-01 22:14:20 304

原创 数据结构常见算法题总结4-字符串

由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,不再使用 HashMap。s1 进行循环移位的结果是 s1s1 的子字符串,因此只要判断 s2 是否是 s1s1 的子字符串即可。使用长度为 256 的整型数组来统计每个字符出现的个数,每个字符有偶数个可以用来构成回文字符串。记录一个字符上次出现的位置,如果两个字符串中的字符上次出现的位置一样,那么就属于同构。因为回文字符串最中间的那个字符可以单独出现,所以如果有单独的字符就把它放到最中间。

2024-07-31 18:06:02 305

PyTorch深度学习实战常用神经网络层.docx

图像相关层主要包括卷积层(Conv)、池化层(Pool)等,这些层在实际使用中可以分为一维(1D)、二维(2D)和三维(3D)几种情况。池化方式包括平均池化(AvgPool)、最大值池化(MaxPool)、自适应平均池化(AdaptiveAvgPool)等。卷积层除了常用的前向卷积,还有逆卷积或转置卷积(TransposeConv)。

2024-08-14

Python爬虫总结.rar

Python爬虫总结.rar

2024-07-23

Python数据机构代码实现总结.rar

Python数据机构代码实现总结.rar

2024-07-23

MySQL索引失效的11种情况.docx

MySQL索引失效的11种情况.docx

2024-07-22

员工工资管理系统-C语言课程设计.rar

员工工资管理系统-C语言课程设计.rar

2024-07-22

P2P信贷平台违约预测数据集-可用于信贷风控和违约预测.rar

P2P信贷平台违约预测数据集-可用于信贷风控和违约预测.rar

2024-07-22

Elasticsearch性能优化汇总.docx

Elasticsearch性能优化汇总.docx

2024-07-22

基于PyTorch的中文聊天机器人源码+数据集.rar

基于PyTorch的中文聊天机器人源码+数据集.rar

2024-07-22

LeetCode100道算法汇总包含算法解析.rar

LeetCode100道算法汇总包含算法解析.rar

2024-07-22

基于多任务卷积网络(MTCNN)和Center-Loss的多人实时人脸检测和人脸识别系统.rar

基于多任务卷积网络(MTCNN)和Center-Loss的多人实时人脸检测和人脸识别系统.rar

2024-07-22

Hadoop 3.3.2 离线安装.docx

Hadoop 3.3.2 离线安装.docx

2024-07-22

SpringClould服务注册与发现eureka+nacos+zk总结.rar

SpringClould服务注册与发现eureka+nacos+zk总结.rar

2024-07-22

Mysql5.7.42一键安装脚本.docx

Mysql5.7.42一键安装脚本.docx

2024-07-22

ChatGPT大模型学习笔记.rar

GPT的本质是把transformer的解码器拿出来,然后在没有标号的大量文本数据训练一个语言模型,来获得一个预训练模型,然后再用它在子任务上作微调。\ - 在transformer出现后,GPT 把transformer的解码器拿出来成为了GPT这个模型。 - 之后BERT把transformer的编码器拿出来做成了BERT这个模型,BERT的基础模型对标的是GPT,在可学习参数规模基本一样的情况下,效果比GPT更好。BERT的large模型甚至比它的基础模型更好。 - 在之后又出现了GPT2和GPT3,技术路线基本不变(具体指依旧使用transformer的解码器),可学习参数和样本规模越变越大,效果也越来越好。 - GPT2的特点是适合做zero-shot,指的是模型在没有进行显式训练的情况下,能够对之前从未见过的类别或任务进行推理和泛化。传统上,模型只能在训练数据中出现过的类别上进行准确预测,而zero-shot学习推动了模型在未见示例的情况下进行预测的能力。 - GPT3的特点是是在后续子任务的训练上权重是不会改变的。主要原因是因为GPT3的可学习参数规模达到了千亿级别,在这

2024-07-22

Java+Servlet学生信息管理系统全部源码+SQL+课程设计文档.rar

本系统利用Java Web技术实现了学生信息管理系统,具有简单的学生信息管理功能。 实现了以下功能模块: 院系信息管理模块,学生信息管理模块,课程信息管理模块,成绩管理模块 并能根据登入用户的权限自动展示相关操作。 技术栈 JSP + Servlet HTML5 + CSS3 + JavaScript + Bootstrap + Jquery

2024-07-22

Java基础学习笔记-包含全部代码和文档

Java基础学习笔记-包含全部代码和文档

2024-07-17

编译安装nginx-1.24.0.docx

编译安装nginx-1.24.0.docx

2024-07-17

Java Spring AOP 面向切面编程的4种实现

动态代理是一种在运行时创建代理对象的技术,通常用于实现AOP(面向切面编程)中的横切关注点,比如日志、性能监控等。以下是几种常见的动态代理实现: JDK动态代理: Java通过java.lang.reflect.Proxy类提供了一种简单的动态代理机制。首先需要获取到目标对象的Class对象,然后创建InvocationHandler接口的实例,这个实例包含对目标方法的实际处理逻辑。最后,通过Proxy.newProxyInstance()方法结合这两个组件生成代理对象。 CGLIB (Class-Graph Library): 这是一个强大的字节码库,可以修改已加载的类并添加新的方法或属性。CGLIB基于继承的方式创建代理,它生成的是目标类的子类,并在子类中拦截方法的调用。 Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice / Dagger: 如果你在使用Google的依赖

2024-07-16

CNN深度学习检测胸部疾病的项目数据集

这是一个关于使用机器学习和深度学习检测胸部癌症的项目(CNN)。 我们使用人工智能模型对患者是否患有癌症进行分类和诊断。 我们向他们提供有关癌症类型和治疗方法的信息。 我们试图收集所需的所有数据,使模型能够轻松地对图像进行分类。 所以我不得不从许多资源中获取数据来启动这个项目。 我研究了很多,从许多资源中收集了所有数据,并为CNN清理了这些数据。

2024-07-10

北京大学人机交互开放实验室发布的PCB缺陷数据集.txt

北京大学人机交互开放实验室发布了PCB缺陷数据集。 6种类型的缺陷是由Adobe Systems发布的图形编辑器photoshop制作的。数据集中定义的缺陷有:缺孔、老鼠咬、断路、短路、毛刺和假铜 这是一个公共的合成PCB数据集,包含1386张带有6种故障(漏孔、老鼠咬、开路、短路、杂散铜)的图像,用于检测、分类和配准任务。

2024-07-10

混合型晶圆缺陷探测数据集

晶圆图的缺陷模式识别(DPR),尤其是混合型缺陷,对于确定生产缺陷的根本原因至关重要。我们在一家晶圆制造厂收集了大量的晶圆图数据。这些晶片映射是通过测试探针测试晶片上每个管芯的电性能而获得的。然而,实际收集的晶片图的各种图案的数量分布之间存在很大差异。 为了保持各种数据模式之间的平衡,我们使用生成对抗性网络生成一些晶圆图,以保持模式之间样本数量的平衡。最后,形成了约38000个混合型晶圆图缺陷数据集,用于识别混合型晶圆表缺陷,并协助研究晶圆制造过程中缺陷的原因。为了方便相关领域的研究人员、学生和爱好者更好地了解晶圆制造过程中缺陷的原因,这个混合型晶圆图缺陷数据集供您研究。

2024-07-10

单个和混合缺陷模式的晶圆映射数据集

硅晶圆制造中单个和混合缺陷模式有效分类的深度神经网络。 一个干净、平衡的晶片图数据集,包含427539个晶片图 输入是尺寸为56 x 56的RGB晶片图像的张量 输出是一个编码的热点,作为一个1 x 36形状的张量

2024-07-10

智慧工地–安全帽人头检测数据集.txt

通过检测人员和安全帽的存在来提高工作安全性。 该数据集包含以下3个类的5000张带有PASCAL VOC格式边界框注释的图像:

2024-07-10

用于质量检查的铸件产品图像数据

该数据集是铸件制造产品的数据集。 铸造是一种制造过程,通常将液体材料倒入模具中,模具中有一个所需形状的空腔,然后使其固化。 收集此数据的原因是铸件缺陷!! 铸造缺陷是金属铸造过程中不希望出现的不规则现象。 铸件中存在许多类型的缺陷,如气孔、针孔、毛刺、收缩缺陷、模具材料缺陷、浇注金属缺陷、冶金缺陷等。 在铸造工业中,缺陷是不需要的。为了去除这种有缺陷的产品,所有行业都有自己的质量检验部门。但主要问题是这种检查过程是手动进行的。这是一个非常耗时的过程,由于人为的准确性,这不是100%准确的。这可能是因为整个订单被拒绝。因此,这给公司带来了巨大的损失。 我们决定使检查过程自动化,为此,我们需要为这个问题建立深度学习分类模型。

2024-07-10

工业铸造产品缺陷预测图像数据集

该数据集是铸件制造产品的数据集。 铸造是一种制造过程,通常将液体材料倒入模具中,模具中有一个所需形状的空腔,然后使其固化。 收集此数据的原因是铸件缺陷!! 铸造缺陷是金属铸造过程中不希望出现的不规则现象。 铸件中存在许多类型的缺陷,如气孔、针孔、毛刺、收缩缺陷、模具材料缺陷、浇注金属缺陷、冶金缺陷等。 在铸造工业中,缺陷是不需要的。为了去除这种有缺陷的产品,所有行业都有自己的质量检验部门。但主要问题是这种检查过程是手动进行的。这是一个非常耗时的过程,由于人为的准确性,这不是100%准确的。这可能是因为整个订单被拒绝。因此,这给公司带来了巨大的损失。 我们决定使检查过程自动化,为此,我们需要为这个问题建立深度学习分类模型。

2024-07-10

一种基于图像对猫和狗进行智能分类的数据集

此数据集包含两类图像“猫”和“狗”。这可以最好地用于计算机视觉中的二分类问题集。

2024-07-10

选课系统-C语言课程设计4

选课系统-C语言课程设计4

2024-06-27

力扣-LeetCode全套2000题目解答C++和Java版.rar

力扣-LeetCode全套2000题目解答C++和Java版.rar

2024-06-26

学生信息管理系统-JavaWeb课程设计-完整代码+初始化SQL+文档

本系统利用Java Web技术实现了学生信息管理系统,具有简单的学生信息管理功能。 实现了以下功能模块: 院系信息管理模块,学生信息管理模块,课程信息管理模块,成绩管理模块 并能根据登入用户的权限自动展示相关操作。

2024-06-26

大数据课程设计-MapReduce实现基于物品相似度的协同过滤推荐-全部代码和数据.rar

ItermCF的基本思想 基于物品相似度的协同过滤推荐的思想大致可分为两部分: 1.计算物与物之前的相似度 2.根据用户的行为历史,给出和历史列表中的物品相似度最高的推荐 对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都 喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出 用户 C 可能也喜欢物品 C。

2024-06-20

大数据课程设计-Hadoop-MapReduce实现sql的统计、groupby和join-全部源码

大数据课程设计-Hadoop-MapReduce实现sql的统计、groupby和join-全部源码

2024-06-20

基于MapReduce的网站访问数据指标统计-Hadoop-大数据课程设计-全部源码和数据.rar

程序中分别对五个kpi指标进行统计操作: 1.browser:用户使用的浏览器统计 2.ips:页面用户独立ip数统计 3.pv:网站pv量统计 4.source:用户来源网址统计 5.time:时间段用户访问量统计

2024-06-20

选课系统-C语言课程设计3

选课系统-C语言课程设计3

2024-06-20

学生选课系统-C语言课程设计

学生选课系统-C语言课程设计

2024-06-20

马里奥游戏-C语言课程设计

马里奥游戏-C语言课程设计

2024-06-20

工资管理系统-C语言课程设计.rar

工资管理系统-C语言课程设计.rar

2024-06-19

图书管理系统-C++课程设计2

图书管理系统-C++课程设计2

2024-06-19

超市库存管理系统-C语言课程设计2

超市库存管理系统-C语言课程设计2

2024-06-19

选课系统-C语言课程设计2

选课系统-C语言课程设计2

2024-06-19

选课系统-C语言课程设计

选课系统-C语言课程设计

2024-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除