
说明
本系列主要用于记录在深度学习开发中我所遇到的感觉比较有用的小技巧,还是瞎写一下,感谢 憨憨 同学对本网站流量的大力支持
正文
Tip1:cuda9.0和10.0的切换
tensorflow2.0的发布,要求cuda的版本从9.0升级到10.0,那么我们在安装cuda10.0之后,想要跑tensorflow1.X的GPU版本就会遇到报错:ImportError: DLL load failed: 找不到指定的模块 。意思就是tensorflow1.X是不能使用cuda10.0了,请教了别人,说是conda环境下安装toolkit可以实现切换?但是我就是不想用conda怎么办,这里就有一个比较笨的方法。
首先我们可以在电脑中同时安装cuda9.0和10.0的版本。具体安装过程就不说了,然后在我们的C盘中就有两个cuda的版本了,如下图:
之后我们进入环境变量配置这两个cuda的环境,需要配置的变量主要有3个部分:
- cuda位置
cuda sample 位置(这个我也不知道是干什么的)
path中cuda lib和libnvvp配置
细心的朋友们就会发现,我这边配置的时候,把两个版本的路径都配置了一遍,但是cuda9.0的路径,我把文件夹名称改成了9.1,这样的好处就是系统在找10.0环境的时候,就不会去找9.0的路径了。上图环境变量下系统cuda版本号如下:
那如果我们要改成9.0怎么办,那就手动吧9.1改成9.0,把10.0改成10.1,这里要注意的是前两个环境配置里面的第一个配置的10.0是要改成9.0而不是10.1奥。改完之后我们再看cuda版本号:
这样就切换好了,然后就可以用tensorflow1.x啦
(好像还是有点麻烦的-_-)。
Tip2:pycharm中的TODO标注
第一次看到这个东西,是在用pycharm看别人代码的时候,第一眼看上去,我靠这什么,这标注这么亮瞎眼的吗,这黄光,金闪闪,不行,我要学。其实就是如下图的代码标注:
就是在代码后面添加 #TODO:然后编写你想写的东西,这个标注主要是提醒你这个代码需要被检查或者未完成,所会高光展示。
同时在pycharm的工具栏底部,可以点开TODO,在里面可以看到文件中所有的TODO标注,点击就可以跳转到相应的代码行,如下图:
有时候用来找代码可能还是比较方便的。
(虽然我现在也没怎么用过……)
Tip3:tensorflow的 tf.einsum函数
第一次见到这个函数,是在看baidu的DAM模型源代码的时候,当时就有点震惊,这啥玩意儿?看不懂,怎么写个表达式就能得到想要的结果了。先来大致感受一下这个函数:

上述代码的输出:

你有感受到这个函数的便利吗,它不仅可以代替tf.matmul,或者是tf.multiply,还能在不同维度的张量之间进行指定的运算,这样的话在编写tensor之间的运算时,用这个简单的函数能够轻松的实现一些复杂的运算。
我们再来看看tf手册中对这个函数的定义。
函数的参数:
- equation:就是我们希望实现运算的式子
- *inputs:等式左边输入的张量,个数要与等式中出现的个数相同
- name:运算名称,可以忽略
函数的返回:与等式右边形式相同的张量
这个函数还是很简单就能上手了,学会合理使用能让你编写代码时事半功倍。
(我现在好像也只是在复现代码的时候使用过这个函数,嘻嘻)
Tip4:(1,1)和(1,)是不一样的
主要是有一次将自己的方法加入到别人代码的时候,发现metric函数一直报错,后来debug的时候发现,原来代码的输出的shape是(1,),在我改了结构之后输出的shape是(1,1),metric中计算准确率的方法就不行了。之前一直觉得这两个shape代表的是一样的,因为这两个看着都是一个括号一个逗号嘛,一看就是二维的,唉。
把这两个形状的tensor变成list输出看看:

就可以看出,前面的是2维的,后面的是一维的。
(你一维的加逗号干嘛呀,唉,关键去掉这个逗号程序还会报错)
结尾瞎扯
(我感觉也不知道有啥好瞎扯的技巧了,可能这期写完这个系列基本就玩完儿了吧…… 我太难了呀)
不过还是会在学习中注意一些比较好玩或者重要的东西,然后在这个系列中记一下的。