自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机图形学:光线跟踪、渲染算法Metropolis与光子photon、kdtree,附源代码

我使用nrenderer框架完成基础光追算法,包含了Metropolis Light Transport与光子映射。和原始结果有一定偏差,不知道具体原因。

2023-05-25 16:56:38 153

原创 使用tensorflow一年多的感想

使用tensorflow一年多的吐槽对比pytorch,tf是真的恶心!!!!!torch的代码,基本上在跑的时候按照官网指示安装一下即可,而tf的代码,搭建环境就超级要命,尤其是ubuntu下,有时候就算把对应好的cuda cudnn安装好了都不行,每次因为这个环境要花费超级多的时间!!!更不用说tf1和tf2的API不兼容问题,初学的时候感觉就是两种语言,极其不方便!!!以后除非必须,我绝对不会再碰一下tf,也劝各位初学者早日转坑(PS:目前github上大部分代码都是用torch来写的了,估计

2022-02-04 22:23:16 1562

原创 c++ map 将char*等指针类型作为key的坑

偶然用到一个map<char* ,int>构造一个类似于id表的东西,char记录变量名称,作为key。在使用的时候我发现,map的key居然会一直变化,导致每次判断count时都为0.仔细检查后发现,由于每次insert入map的key我都是使用同一个char,而这个char会一直变化。因此要么每次插入声明一个新的char,要么使用string类型。这个错误真的很难发现,但其实想一想也很合理,所有指针等可变类型作为key都需要小心,因此map的key最好用不变的常量...

2021-10-24 19:55:45 2813

原创 ValueError: object __array__ method not producing an array解决

今天在调试之前跑过的一个代码,结果发现报错:ValueError: object array method not producing an array关键是这个代码之前已经可以运行,环境我基本上没改,就一直报这个错误。我仔细检查了一下报错内容,发现是numpy的数组转向tensorflow的tensor时报错,感觉是numpy版本的问题,但是检查了一下版本和之前没有变化。我卸载了numpy之后发现,环境中原来有两个版本的numpy,有一个版本的numpy是之前要删除但是残余的,于是将两个都删除之后

2021-09-23 19:37:20 889 1

原创 ModuleNotFoundError: No module named ‘numpy.testing.nosetester‘解决

conda新建一个环境 本身没有安装sklearn,重新安装了一个,调用发现报错:ModuleNotFoundError: No module named 'numpy.testing.nosetester检查报错文件,发现是import sklearn相关包的时候报错。网上看到一些方法是将sklearn相关的包更新到最新版本,但是我自己试了一下发现还是不行。最后发现是numpy和scipy的版本不匹配造成,conda环境输入:pip3 install -i https://pypi.tuna.t

2021-09-06 10:51:33 3286

原创 tf1报错 The value of a feed cannot be a tf.Tensor object

今天用tf1复现论文时,发现一个错误,那就是session在run的时候,需要feed一些数据,这里的数据要求不能是tensor,因为tensor也只是图中的结构,并没有存放真正的数据正确的数据可以是字符串,数组等具有真实数据的结构。这其实修改一些代码即可。例如原来feed_dict(data:d,x:x}中data是一个tensor。那么在这句代码前加上data=sess.run(data),这时候data拥有了具体数据,就可以传递了。...

2021-09-05 15:41:34 160

原创 Ubuntu下安装splint工具

最近编译原理需要使用到splint工具,windows下安装后配置比较复杂,并且还容易出错闪退。因此我用linux系统来安装。看了一些用linux安装的教程,发现大部分是既复杂又有错误,很浪费时间,最后发现这就是一句话的事情。打开终端输入:sudo apt install splint然后OK了:然后测试一下,先写个c文件调用splint静态编译:可以看到splint对代码中的变量进行了分析...

2021-09-01 09:29:45 513

原创 ELMO模型

ELMO是考虑上下文的模型上图只考虑了正向序列,接下来再反向进行训练:训练好正向和逆向的网络后,每次字符都输入两个网络获得对应隐藏层输出。将多层的h相加获得最终的h,再进行接下来的处理。...

2021-08-28 23:28:04 98

原创 auto-encoder

encoder:将输入转换为一个code 代表着输入的信息decoder:将code解码为输入同类型数据单独的encoder和decoder无法训练,因为是无监督的,但是合在一起就可以训练。deep auto-encoderencoder可以将输入编码成一个向量,这里同时需要一个判别器,能够分辨向量和输入之间是否匹配。因此这里要先训练判别器,可以输入图片和label,减小判别器的loss。将原始图片和decoder生成图片相减,获得分数。...

2021-08-28 23:18:14 70

原创 RNN变体及其应用(详细)

ppt来自于李宏毅老师的视频首先从带有记忆的网络开始:前一步的隐藏层状态会写入记忆单元中再次输入可以发现相同输入。因为记忆单元存在,输出是不同的rnn就是具有类似特点的网络,可以记忆之前输入的信息同时rnn根据存储信息不同可以划分为不同的网络:存储隐藏状态或者是输出双向RNN:将序列按照正反的双向顺序输入,根据两个的h获得输出y优点是获得信息更广LSTM通过输入门决定是否将记忆写到记忆单元中输出门决定是否将记忆单元中的值输出遗忘门决定是否遗忘记忆单元的值具体结构:输

2021-08-28 14:54:25 1379

原创 beam search

为什么要用beam search:rnn网络每次可以输出下一个节点的概率,但是如果使用贪心每次选择最大概率的节点,最终序列的概率不一定最大:例如只按照下一个节点的概率可以获得ABB 0.6^3但是还有BBB 0.4*0.9^2概率会更大同时又无法检查所有的路径(计算时间问题)因此要是用beam search设定beam的大小 例如为2那么每一次选择概率最大的2个节点。首先选择第一层的AB,下一步就有4个节点可以选择,选择最大概率的两个节点BB,以此类推实例:设定beam为3,将起始字

2021-08-28 11:22:11 143

原创 transformer模型

ppt来自李宏毅老师的视频在讲transformer之前需要了解一下rnn和attention的知识rnn缺点:不容易并行化计算,要一个一个字符输入方法1:用CNN代替将整体序列输入,使用filter获取信息,为了获得长序列的关系可以使用多层CNN方法2:self-attention将每个输入向量分别乘以不同矩阵获得不同的向量接下来用q对k做attention,即输入q和k输出匹配分数,注意q和k维度相同scaled dot-product attention:具体是将q和k点乘除以

2021-08-28 11:04:28 298

原创 attention模型

attention进行翻译:核心部分是一个rnn网络,每次输入一个向量获得对应的隐藏层向量h,z作为decoder网络的一个参数向量,每次获取z和h的匹配度作为a匹配度可以用cos相似计算,也可以搭建一个网络计算,网路的参数可以和其他参数一起学习将所有h和第一个z计算的匹配度a,通过softmax后求和获得第一个c,c作为decoder的输入。可以视为获取了输入的部分信息。接下来再用第二个z分别和h求匹配度,获得第二个c再次输入decoder,以此往复直到生成结束...

2021-08-28 10:17:28 78

原创 半监督学习的概念

监督学习训练数据x和标签y半监督除了上面的还有没有标签的x通常没有标签的x数目远大于有标签的半监督也根据如何使用没有标签的数据分成两类:通常使用半监督学习是因为收集数据时难以获得对应的标签。...

2021-08-27 22:51:35 97

原创 word embedding笔记(来自李宏毅老师的课程讲解)

ppt来自于李宏毅老师的讲解视频:单词向量表示:1可以用独热码(占用空间太大,并且单词之间的关系没有体现)2分类后词嵌入(减少空间,相同类型的向量更加接近)词嵌入首先词嵌入是无监督学习,输入单词输出对应向量表示。词嵌入中需要利用单词的上下文1:count based两个单词如果频繁的一起出现,向量会接近2:prediction based处理的是一个句子 其中wi代表的是一个单词每次输入一个单词的独热码向量,输出的是概率向量,每一位代表对应单词的概率。模型内部,第一层作为对应

2021-08-27 22:40:54 191

原创 tf.saved_model加载模型出现options报错

在使用tf.saved_model保存模型之后,load加载模型使用时,发现如下错误:仔细观察错误情况,发现是输入参数不匹配的原因。这里需要注意一下,tf.saved_model保存模型时,函数的输入名称需要和加载时函数输入名称相同,我发现模型函数是: def call(self, inputs, **kwargs):而加载后我是这样调用的:fake_logits = discriminator(input=samples,training=False)这时候应该发现了 input和in

2021-08-26 11:00:47 543

原创 tf2梯度计算为None的情况

今天搭建用tf2搭建WGAN网络,自己来写梯度函数,在使用tf.GradientTape()来求梯度时,发现求出结果为None。一般来说结果为None,表示输入变量之间没有构成可求导的关系,同时也需要理解tf.GradientTape()求导的原理,是根据输入的target和source构建好的图进行求导,其中的变量可以视为节点,如果节点间没有连接,求导便会停止,返回None。我检查代码后发现,在用CNN搭建判别器的时候,有这么一行代码:for input in inputs.numpy(): ..

2021-08-26 10:47:34 1073

原创 tf.saved_model报错iterating over `tf.Tensor` is not allowed in Graph execution.

今天又是在保存模型时报错,结合最近的错误,我发现在梯度计算过程中是没有问题的,但是在保存模型时就会因为模型中不符合tf2要求的地方报错。这次的错误是iterating over tf.Tensor is not allowed in Graph execution.非常容易理解,就是迭代了一个tensor,我查看代码发现确实这样:#输入的inputs是一个tensor类型变量for input in inputs: .... ....我之所以这么做,是因为当时我搭建的是一个CNN网络,每次只

2021-08-26 10:41:50 2885 1

原创 Failed to get convolution algorithm. This is probably because cuDNN failed to initialize解决

tf2 调用tf.keras.layers.Conv2D函数时报错,检查了一下参数,shape和type都没问题,看了一下报错说是cuDNN不能初始化,先开始觉得是cuDNN版本是不是不匹配了,但是检查了一下发现没问题。之后发现是输入的数据太大,导致显存不足。在代码前加上:#用于显存修改config = tf.compat.v1.ConfigProto(allow_soft_placement=True)config.gpu_options.per_process_gpu_memory_frac

2021-08-25 20:54:17 162

原创 tf.saved_model.save报错解决

前几天写了一篇同样关于 tf.saved_model.save报错的解决文章,不过这次的错误不太一样。上一篇文章:savemodel报错值得注意的是:我使用的模型是自定义模型,而不是使用keras.model中的Sequential()封装的函数,所以不能使用model.save(‘xxx.h5’)对模型进行保存,只能通过tf.saved_model或者是save_weights来保存。这次我同样是搭建GAN网络来破解口令,不同的是生成器方面,不再使用卷积核激活,而是使用LSTM网络代替,训练后保

2021-08-25 12:37:33 1549 1

原创 tensorflow2自定义模型保存的坑(tf.saved_model.save以及自定义GAN)

今天自己用tf2搭建框架完成PassGAN网络,终于把模型和训练算法都完成了,效果也不错的时候,突然发现使用tf.saved_model.save保存模型会报错,而且错误很离谱,基本上无法debug的那种,令人十分头疼。首先介绍一下代码的大致结构,GAN网络中生成器和判别器都是自己定义的,并且使用到了自定义的layer:训练时可以使用tf.train.Checkpoint的保存方法,即使中断训练,可以重新加载后继续训练。但是这个方法不太方便,需要对源代码有了解,因此就可以使用tf.saved_mode

2021-08-23 21:38:08 3721 5

原创 OpenEuler系统课程总结

OpenEuler系统课程总结实验过程:1宿主机系统准备:2设置新的分区3安装包和补丁4构建一个临时的系统5 构建LFS系统6系统配置和脚本设置7.完成系统的安装总结和建议:实验过程:1宿主机系统准备:这次的实验中,使用virtual box创建虚拟机并安装了openeuler系统,在安装系统的过程中,步骤比较繁琐,包括了网卡、磁盘、存储等各方面的设置,但是也有助于了解系统的各个方面,尤其是内存的分配(分配过多对导致主系统难以启动,感觉这次的实验对电脑性能要求也挺高的)同时也学会了使用cmd窗口或者

2021-07-07 09:40:14 1414

原创 多项式基本运算的实现

多项式的基本运算(链表实现)程序具体说明:使用链表实现两个多项式的基本操作。初级要求:实现加法、减法和微分操作。高级要求:实现乘法和除法操作。(除法操作中,当不能除尽时还要求列出余式。)节点要包括:系数,指数,下一节点的指针链表中,各结点按指数升幂或降幂排列,生成的结果多项式仍使用原多项式所占用的存储空间:两个同类项相加或相减时,如果系数不为0,则修改该结点的系数值,而指数值不变,将该结点链入结果多项式中,而另一项则释放空间;如果系数为0,则这两项占用的空间均需释放。不同类项则直接放入结果多项式

2020-10-24 13:26:54 350

原创 DFS BFS

BFS和DFS的代码简单实现(详细注释)代码部分参考https://blog.csdn.net/qq_36525906/article/details/77387717#include<iostream>#include<queue>using namespace std;int adj(int*visit, int**a, int n, int v)//获取相邻的点的下标,如果无相邻节点,或者已经访问了则返回-1{ for (int i = 0; i < n;

2020-10-20 19:51:46 61

原创 BST的基本代码实现(详细注释)

BST的基本代码实现(详细注释)用的都是非常朴素的方法,欢迎交流讨论#include<iostream>#include<queue>using namespace std;typedef struct Bnode { Bnode*left, *right; int data;}BSTnode, *BSTree;void insert(BSTree &root,int val)//改变内容需用指针的引用{ if (!root) { root = n

2020-10-11 10:04:24 1214

空空如也

空空如也

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

TA关注的人

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