自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老王的博客

需要冷静的少年

  • 博客(11)
  • 收藏
  • 关注

原创 02 线性代数实现

本文将结合代码简要介绍代数中向量点积、矩阵乘法、L2范数、矩阵的弗罗贝尼乌斯范数(Frobenius norm)等的实现1、向量点积torch.dot()2、矩阵乘法torch.mm()3、矩阵乘于向量torch.mv()4、L2范数其结果是一个标量torch.norm()5、L1范数torch.abs().sum()6、矩阵的弗罗贝尼乌斯范数(Frobenius norm)本质是矩阵的所有元素的平方求和在开根号,做法其实就是将矩阵拉成一个向量后求其范数,可以直接使

2021-10-06 23:15:08 108

原创 02指定维度求和

高维张量指定维度求和总是让人摸不着头脑,接下来我将手把手教大家如何理解指定维度求和。一、指定一个维度求和1、二维咱要记住,0维永远是最外层中括号里的元素,1维度是次外层中括号里的元素。所以在二维张量中指定0维度求和其实是所有行都相加,留下1维度(列);指定1维求和是所有列都相加,留下0维度(行)。2、三维咱要记住,0维度永远是最外层中括号里的元素,1维度是次外层中括号里的元素,则2维度是最里层的元素。所以在三维张量中指定0维求和其实是所有二维矩阵都相加,留下1维度和2维度组成的矩阵;指定1维度

2021-10-06 22:24:32 1842

原创 01数据操作

一、理解深度学习中的数据结构(数据存储结构)1、0维的数据是一个数,常用来表示一个类别2、1维的数据表示一个特征向量,不同的列代表不同的特征。3、2维的数据是一个样本,每一行是一个特征向量,不同的列表示不同特征。4、3维的数据常用来表示图像,3个维度分别是 宽 x 高 x 通道5、4维的数据常用来表示批量图像,4个维度分别是 图像数 x 宽 x 高 x 通道6、5维的数据常用来表示视频数据,5个维度分别是 视频 x 时间 x 宽 x 高 x 通道数二、数据操作的实现在pytorch

2021-10-02 22:38:38 282

原创 详解wait/notify机制,看这一篇就够了

文章目录1 wait/notify 机制的原理2 wait() 方法的基本使用2.1 在使用前没有获得锁,抛出异常2.2 在使用前先获得锁,正确调用wait,无异常抛出3 完整实现 wait/notify3.1 创建Service类3.2 创建ThreadA线程类3.3 创建ThreadB线程类3.4 测试与分析1 wait/notify 机制的原理1.1 wait()方法是Object 类的方法,它的作用是使当前执行wait()方法的线程等待,在wait()所在的代码行处暂停执行,并释放锁,直到接到

2020-09-27 16:59:57 6446 1

转载 volatile可见性原理解析

在java中,关键字volatile就像一个神话,几乎在各种博客、微信订阅号、聊天群中反复提起,可见volatile在多线程领域多么重要。所谓可见性,通俗的讲就是B线程能马上看到A线程更改的数据1.1 volatile可见性深度解析cpu运行所需要的数据(读操作)直接来自于内存, 而修改变量值(写操作)实际上有如下三步:1、将主存中的数据加载到缓存中2、CPU对缓存中的数据进行修改3、将修改后的值刷新到内存中1.1可以解决实例变量没有同步更新而造成的死循环举个栗子service类.

2020-09-27 12:18:02 633

原创 synchronized任意锁对象的几种用法

1. synchronized(任意对象)1.1 如果多个线程持有“对象监视器”为同一对象,即任意对象是同一个对象,那么这个同步代码块将同步执行1.1.1 Servicepublic class Service { private String userName; private String password; private String aString = new String(); public void setUserInfo(String userName

2020-09-26 18:10:21 1340

原创 停止线程的几种简单方法

停止线程最简单的方法是使用stop()方法暴力停止,但是这种方法在java中已经被画横线抛弃,是不再被采用的方法,原因有两,其一是因为stop()方法容易造成业务处理的不确定性,其二是因为stop()释放锁会给数据造成不一致的结果。下面给大家介绍几种通用的正确的停止线程的方法。一、this.interrupt()+this.isInterrupted()+return步骤1,首先在线程停止前使用this.interrupt()加入线程中断标记,this 是需要终止的线程对象,该标记并不会使得线程真正的

2020-09-26 15:03:38 3009

原创 多线程之run()和start()比较

在比较线程的run方法和start方法前,我们先来看一下currentThread()方法:public class Test { public static void main(String[] args) throws Exception { System.out.println(Thread.currentThread().getName()); }}currentThread()能返回执行当前代码的线程,下面开始正式进入run和start的比较:一、start()方法

2020-09-14 23:03:59 309

原创 创建线程的两种方式

方式一、实现Runnable接口class MyThread implements Runnable{ //成员(资源) public void run(){ //执行的任务 } } Thread thread = new Thread(new MyThread());方式二、继承Thread类Thread类实现了Runnable接口,注意是“实现”,不是“继承”,所以Thread类不是Runnable的子类继承Thread类public class MyThread e

2020-09-14 21:37:41 310

原创 动态规划——最长非下降子序列长度

题目:如果有人认为吃东西只需要嘴巴,那就错了。都知道舌头有这么一个特性,“由简入奢易,由奢如简难”(据好事者考究,此规律也适合许多其他情况)。具体而言,如果是甜食,当你吃的食物不如前面刚吃过的东西甜,就很不爽了。大宝是一个聪明的美食家,当然深谙此道。一次他来到某小吃一条街,准备从街的一头吃到另一头。为了吃得爽,他大费周章,得到了各种食物的“美味度”。他拒绝不爽的经历,不走回头路而且还要爽歪歪(爽的次数尽量多)。数据规模和约定美味度为0到100的整数n< 1000输入两.

2020-07-02 19:05:33 388

原创 STL学习之迭代器

迭代器提供了顺序访问容器中每个元素的方法。迭代器可以使用"++"运算符获得下一个元素的迭代器,可以使用"*"运算符访问当前迭代器所指向的元素。如果元素类型是结构体或类,还可以使用“->”运算符直接访问该元素的一个成员。以下是个人在学习容器时获得得一些见解。一、 输入流与输出流迭代器输入流迭代器输入流迭代器用来从一个输入流中连续地输入某种类型的数据,它是一个类模板,例如:template <class T>istream_iterator<T>;T是数据类型,需要满足两

2020-06-29 23:01:01 270

空空如也

空空如也

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

TA关注的人

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