- 博客(64)
- 收藏
- 关注
原创 Compute Shader in Unity Part2 ——Texture
Texture 在Compute Shader 中算是一个特别重要的应用了。其实原理什么的都和上一篇说的一样。下面说一些不一样的。 #pragma kernel CSMain RWTexture2D<float4> Result;[numthreads(8,8,1)]void CSMain (uint2 id : SV_DispatchThreadID){...
2018-10-15 11:48:29
1431
原创 Compute Shader in Unity Part1
Compute Shader 是为了在Unity中使用GPGPU,即通用目的图形计算单元,它独立于渲染管线,通用目的也说明了它可以用于多种目的,与CPU相比,GPU的优势在于多线程并行计算,当你想对大量数据进行相同的计算的时候,会快很多。以下是使用说明: #pragma kernel CSMain#define GroupLength_x 8RWStructuredBuffer&...
2018-10-12 17:12:46
925
原创 Unity 中的半透明
首先说Unity中的渲染顺序,在Unity中改变渲染顺序的方式有四层,第一层为Camera的depth,第二层为Sorting Layers, Canvas可直接在面板中调节,其他的可能需要在脚本中设置,第三层为shader中的渲染队列,第四层为Pass(Pass的顺序在不同情况下有差别)。再说半透明,最重要的是渲染顺序,只要渲染顺序正确,透明材质是可以不用关闭深度写入的,即使是多个半透明物体也是...
2018-02-17 22:50:10
2432
原创 Unity中的旋转与万向锁的分析
将以前写得纸质档发出来 :)这个扫描宝是真的好用。我上面写得所有结论在Unity中都可以得到验证,各位可以自己试试,这里还得补充一下,一旦不按自身的轴转动时,就不能直接使用基础旋转矩阵了。...
2018-02-11 19:11:52
781
原创 Unity中旋转、放缩、平移的顺序对最终结果的影响
最近在复习曾经学过的东西,为了下次再忘记,还是记录下来。Unity中旋转、放缩、平移的顺序对最终结果的影响是什么?(矩阵在博客中写太麻烦,直接写纸上了)这些都可以在Unity中动手进行验证,但你若是在Inspector中的Transform中直接设置,你会发现总是正确的,因为当你直接给出所有数据时,Unity总是按照正确的顺序进行转换,所以用Translate和Rotate吧,老哥。...
2018-02-10 21:52:49
2163
原创 Keras中的损失函数与激活函数
sigmoid与softmax分别为二分类和多分类激活函数,而binary crossentropy和categorical crossentropy分别为二分类和多分类的损失函数。
2018-01-24 23:37:09
2468
原创 Keras中的Embedding层
Embedding层一般用于自然语言中的降维,在abcdefg字符串中每个字母都可以用独热编码来表示,但是一旦字符串十分长,独热编码也就会十分长,因而使用Embedding来表示。不仅如此,Embedding也可以用来生成特征矩阵,但事实上也有降维的功能。Embedding(n_in, n_out, input_length=1, W_regularizer=l2(1e-4))(inp)
2018-01-24 23:35:30
3296
原创 Python简单函数
glob模块glob模块:是一个文件搜索模块,查找文件只用到三个匹配符:””, “?”, “[]”。””匹配0个或多个字符;”?”匹配单个字符;”[]”匹配指定范围内的字符,如:[0-9]匹配数字。glob(pathname)函数,返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。下面是使用glob.glob的例子:
2018-01-24 23:33:09
559
原创 Keras中的类与函数
注意点1.data_mode的默认值是”channel last“,在构建网络时一定要注意。models.pySequential该类用于表示一个网络模型,并继承于Model类save_weights(filepath) 该函数用于将模型的权重保存为一个h5文件。image.pyImageDataGeneratorImageDataGenerat
2018-01-24 23:32:15
1028
原创 Numpy中的stack函数
stack(x,axis=0)这个函数用于将多个数组合并,其中每个数组的shape都相同,其中axis表示在第几个空间开始进行结合,这样说很难理解,举例说明:[0,1,2,3] 的shape可看做(1,4)a = np.arange(4)b = np.arange(4)c=np.stack((a,b),axis=0)print(c)print(c.shape)输出:[
2018-01-24 23:31:23
1332
原创 finetune的意义及用法
finetune 就是微调的意思,那为什么要微调呢,为什么不能自己重新训练一个网络呢?因为我们没呢么多样本,没那么高超的技术使神经网络合理且有用,因此我在训练好的模型的基础上只训练其中一个或几个层,而把其他层的参数都冻结起来。一个正确的训练好的神经网络应该是什么样的呢?如果将神经网络中的所有过滤器都可视化的话,可以发现,由低到高实际上是不断组合,不断得到更高层次抽象的过程,例如一开始只
2018-01-23 11:57:18
4262
原创 权值的初始化—-xavier
对网络中的权值进行合理的初始化是为了保证在训练之前使网络的输出值与目标值的差距不是太大,比如输入(2,3)目标值为4,但网络的输出值为500,那么loss就太大了,训练也就很难进行。因此为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等(在一篇博客上看到的,下面有链接)。因此就采用xavier来对权重进行初始化,本文只讨论如何使用,不讨论其中原理。caffe中xavier初始化有三
2018-01-23 11:54:46
1464
原创 Numpy中的concatenate函数
concatenate(x,axis=0)这个函数用于将多个数组进行连接,这与stack函数很容易混淆,他们之间的区别是concatenate会把当前要匹配的元素降一维,即去掉最外面那一层括号。举个例子:axis=0a = np.arange(8).reshape(2,2,2)b = np.arange(8).reshape(2,2,2)c=np.concatenate((a, b)
2018-01-23 11:53:47
22228
1
原创 对神经网络的思考与总结
1.为什么通过使用过滤器对图像进行卷积操作能够达到识别特征的功能?答:在神经网络中,数值的高低代表了激活程度的高低,而在卷积操作中,卷积核的数值分布决定了图像像素应该具有怎样的数值分布才能得到高的卷积结果,因此,不同的卷积核都代表着对不同的特征的识别。有个有意思的地方是,以前的传统图像识别是人工选择卷积核来对图片进行特征提取,而现在是神经网络通过训练来决定卷积核。并且随着网络的深入,卷
2018-01-23 10:33:17
477
原创 Batch Normalization层
Batch Normalization层我们可以通过标准化输入来避免网络中局部数据十分大或十分小(不在同一个数值范围),同时我们也需要标准化激活函数的输出来保证网络的稳定。所有网络中都应该使用BN层,他能使网络块10倍,因为学习率可以调大了,且由于不会出现某个值十分大或十分小的情况,曾经许多不能的网络也都可以训练了,BN能够很好的预防过拟合,因此可以减少Dropout的
2018-01-23 10:31:18
541
原创 Tricks
1.避免过拟合的方法使用dropout。增大训练数据集在损失函数中添加正则项数据增广即对图片进行旋转、拉伸等操作来倍增样本数量。Batch Normalization层在每个卷积层或全连接层后面加入Batch Normalization层。2.提升最终准确率的普遍方法将多个模型的结果求平均值,作为最后的结果我们可能为了更好的结果不断更改模型,但我们可以对这些
2018-01-23 10:30:05
336
原创 Python中的浅拷贝与深拷贝
别名a=[1,2,3,4]b=aid(a),id(b)(64619584, 64619584)a赋值给b,事实上没有创建任何新对象,b的地址和a一样,即b只是a的一个别名。浅拷贝a=[1,2,3,[4,5]]b=a[:] # or b=list(a)id(a),id(b)(64619304, 64620504)使用工厂函数或切片可进行浅拷贝,此时b为新创建
2018-01-23 10:29:35
314
原创 单变量微积分
1.导数的解释:(1)切线的斜率为导数(2)瞬时变化率即为导数2.在某点连续指的是在这一点的值与左右极限的值都相等。3.sinx/x4. 5.可导必连连续证明:6.使用极限的原因之一是使0可以用x-x0代替(x无限趋于x0),这样一来,0就可以作为除数了。
2018-01-23 10:27:24
929
原创 Pyhon与Numpy的不同
**一**. list的元素可以是不同的类型,而ndarray只能包含同一种类型的元素。**二**. 切片的返回值所表示的意义不同。 import numpy as np a=np.array([1,2,3,4,5,6]) b=[1,2,3,4,5,6] c=a[:3] d= b[:3] c[0]=0 d[0
2018-01-23 10:11:03
466
原创 Panda与Numpy中的数据选取
Pandas中的数据选取主要分为如下方式: 1. [0]数字索引直接选取2. ['a']通过名字索引选取3. [1:] [:3] [::-1] ['a':'c'] 通过切片选取4. [x5. [boo]通过boolen矩阵作为mask选取6. ['a','b'] [1,3,5] 通过Fancy Index选取。而Numpy中的数据选取与Pandas十分
2018-01-23 10:09:30
1588
原创 在Keras中将cpu切换为gpu
在终端中输入gedit ~/.theanorc 这时文档应是空白的,在文档中写入:[global] device=gpu floatX=float32 [dnn.conv]algo_bwd_filter = deterministicalgo_bwd_data = deterministic[cuda]root=/usr/local/cuda-8.0[lib]cnmem=0.3[n
2017-08-06 14:40:36
3890
原创 Tmux的使用
Tmux中的分级如下: 会话(session or client)-->窗口(window)-->子框(pane)常用命令与快捷键:新建一个会话 tmux new -s name 切换会话: ctrl+b+( ctrl+b+) 直接选择会话: ctrl+b+s 创建新的子框: ctrl+b+“(纵向) ctrl+b+%(横向) 依据序号切换窗口: ctrl+b+index 取消会
2017-08-06 14:40:11
372
原创 Python语法
下划线(_)在解释器中有特别的含义, 表示最后一个表达式的值。所以上面的代码执行之后, 下划线变量会包含字符串:>>> _Hello World!Python 的 print 语句,与字符串格式运算符( % )结合使用,可实现字符串替换功能,这 一点和 C 语言中的 printf()函数非常相似: print “%s is number %d!” % (“Pyth
2017-08-06 14:39:37
415
原创 Numpy中的pad函数
填补一个数组。pad(array,pad_width,mode,**kwars)其中array为要填补的数组(input) pad_width是在各维度的各个方向上想要填补的长度,如((2,3),(4,5)),如果直接输入一个整数,则说明各个维度和各个方向所填补的长度都一样。 mode为填补类型,即怎样去填补,有“constant”,“edge”等模式,如果为constant模式,就得指定填补的
2017-08-06 14:38:53
17751
5
原创 Numpy中的Broadcasting
Broadcasing即扩展,推广的意思,是为了使不同shape的array相互能够进行运算。 例子如下: a = np.array([1.0, 2.0, 3.0]) b = np.array([2.0, 2.0, 2.0]) a * b array([ 2., 4., 6.]) >>> a = np
2017-08-06 14:38:14
582
原创 Numpy简单语法
(1) import numpy as np a=(3,3) b=(4,4) c=a+b print(c)(3, 3, 4, 4) (2) import numpy as npa = np.array(range(3), dtype=’float64’) b = np.zeros(3) a array([ 0., 1., 2.]) b array([ 0., 0., 0.
2017-08-06 14:37:56
539
原创 Caffe中层参数及数据的可视化
本文将讲解如何可视化caffe网络中的层的参数及数据,即只要输入的规格为(n, height, width)或(n, height, width, 3)都可以通过如下函数可视化。 def vis_square(data): “”“Take an array of shape (n, height, width) or (n, height, width, 3)
2017-08-06 14:36:28
731
1
原创 Keras的入门
model = Sequential()model.add(Dense(32, activation='relu', input_dim=100))model.add(Dense(10, activation='softmax'))model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
2017-08-06 14:31:46
880
原创 faster-rcnn-demo
原文地址:lefenger.com运行github上的python版本的faster-rcnn demo的过程为:克隆github的项目到本地 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 在caffe-fast-rcnn文件夹中执行 cp Makefile.config.example Makefi
2017-07-30 11:50:04
669
原创 Caffe 问题记录
原文地址:lefenger.comCaffe使用所遇到的问题。一当 caffe为训练模式时,dropout不执行。二layer{ bottom: "a" bottom: "b" name: "conv1_1" param { propagate_down : 0 //a不会得到梯度传播 propagate_down : 0
2017-07-30 11:47:47
339
原创 循环神经网络
循环神经网络(简称RNN),他有自己的状态,并可以实时根据自己得到的信息改变自己的状态。 ht=fw(h(t-1),xt) 这个函数表示,输入为上一状态与当前处理得出的向量x,fw是一个函数,它有权值w,在每个时间步长都会执行这个fw函数,并且都使用相同的w,这个函数会判断下一步将转换为什么状态。其中一个fw的简单例子为tanh(W(hh)h(t-1)+W(xh)xt) 如上图所示,在
2017-07-22 20:43:27
720
原创 手势识别项目总结
序言此文章只是总结,没有任何技术干货。正文这个项目是要在unity中使用opencv识别各种手势,一路过来也算是坎坷。由于是在Unity中使用,所以我必须使用emgucv来进行识别。第一步要做的就是如何将手与背景分隔开,一开始我使用的是一个实时构建背景的算法,所谓实时构建背景,就是在基于背景差分法的基础上检测图片中有哪些像素的颜色总是不变,如果某个像素的颜色长时间不变化的话,就把这个像素自动归为
2017-07-17 00:14:48
4404
原创 《线性代数》学习笔记
一、消元法 第一步先找到三个主元(povit),主元不能为零。主元在矩阵的对角线上,如果对角线上的值为0的话,就交换行,但如果消元到最后一行时主元为零,则这次消元失败,这个矩阵称为不可逆矩阵。而行列式(determinant)的值就是对角线上主元的乘积。矩阵乘向量与向量乘矩阵的含义与区别:矩阵乘向量是对矩阵中列的线性组合,而向量乘矩阵是对矩阵中行的线性组合。 由以上两条可得出一个结
2017-07-09 21:03:18
2039
原创 MFC与stdafx
MFCMFC即微软基础类库(英语:Microsoft Foundation Classes,简称MFC)。它以C++类的形式封装了windows api,它实际上是windows api的高层实现,各种windows句柄会被包含在MFC的相应的类中,若要进行操作只需调用相关的成员函数即可。stdafxstdafx.h中包含了所有需要预编译的头文件,用户可以自行添加,预编译是只部分高频使用的头文件预先
2017-07-02 16:58:58
981
原创 Opencv3.2的安装及创建一个Opencv工程的要点
安装就直接下载Opencv3.2的安装包,解压过后如下所示: 其中dll文件需要配置环境变量,就是把bin文件夹的路径配置到环境变量中。创建一个Opencv工程由于Open3.2 是64位版本的,因此也得把vs项目的目标计算机与编译平台换为64位的,方法分别如下: 修改完之后,还要配置头文件和lib文件。 包含目录与库目录分别为头文件与库文件的目录,添加进去就行。 在附加依赖项添
2017-06-28 15:33:47
620
原创 《编程范式》学习笔记
(一)编程范式 (1)八位能表示最大的数是多少? 为255,最多能表示256个数(包括0),2^x=2^0+2^1+2^2+2^3+…………+2^(x-1)+1(2)二进制计算:负整数与正整数相加的结果0时,是如何进行二进制运算的? 以short类型(2字节)为例,00000000 00001111 与10000000 00001111相加,对后者取反加1得到11111111 11110001
2017-06-12 22:33:12
1879
原创 关于做梦
正文我开始怀疑一件事——每个梦境是否是超然于时间的,意思就是你可能会梦到未来的事物,我曾经也听说过梦可以预知未来,但我的感觉是梦境的存在仿佛是在第五个维度中(假如时间是第四个维度的话)。 最近的一系列经历让我更加确信了这一点。或许我们一直在接受着第五维度所发送的第四维度的东西,假设第五维度为一个数组,那么我想梦境中的内容和现实中的内容都以第四维度的形式存储在这个数组之中。 有一个可能性是,这两个
2017-03-14 13:46:43
773
1
原创 Python 问题记录
1.Tshape=(1,2,3,4) net.blobs[‘data’].reshape(*Tshape) 这里的*的作用是将Tshape的所有元素都展开作为参数,其效果为 net.blobs[‘data’].reshape(1,2,3,4)
2017-01-26 11:30:14
698
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人