今天(2019年5月4日)赶完了毕业设计的代码,算是手撸了一遍UNet的TensorFlow代码吧。离脱离调包侠的目标又近了一步。在这里想边写论文边总结一下在撸代码的过程中遇到的坑。

虽然不能逮着一只羊撸,但是我的代码主要抄袭参考了jakeret/tf_unet,在此致谢(虽然他也看不到)。源代码放在这里,还有一点点收尾工作没有完成。

Windows下使用GPU加速TensorFlow

虽然这样很挫,但是我在Windows下跑TensorFlow。毕业论文催得紧,赶紧买了台带独显的笔电回来打游戏。买回来才发现笔电装Linux,显卡驱动是个大坑。在比较了Linux的坑和Windows的坑之后选择了跳Windows的坑。毕竟论文写不出来还可以打游戏不是?

Windows当然是Windows 10。你可能会说,Windows 10下不是有Linux子系统吗?我曾经也动过这个歪脑筋。但是,子系统不支持CUDA加速,所以还是洗洗睡吧。

安装TensorFlow之前我也上网看了很多教程之类的东西,什么先装 CUDA再装cuDNN,装完cuDNN再装Python,Python搞完上virtualenv,virtualenv里装上TensorFlow。还要注意CUDA版本、cuDNN版本、Python版本和TensorFlow版本配套。简直比俄罗斯套娃还套娃。
现在看来全在扯淡。
正确的步骤是:

  1. 下载安装Anaconda(都9102年了,当然是选Python 3.x的版本);
  2. 在Anaconda里搜索安装tensorflow-gpu。

现在你的TensorFlow环境就安装好了。伟大的Anaconda会一条龙安装从CUDA到TensorFlow的所有东西。至于你是在base环境里安装还是新建环境安装都无所谓,我就直接装在base环境里了。这里有一个坑就是,如果你安装了visual studio里面的Python环境或者从Python官网下载的Python环境,请你卸掉,要不然Python环境会乱掉。

我的笔电独显是RTX 2060,MINIST手写数据集大概一两分钟可以训练完。这样做效率可能会有折损,但是这个训练速度我是可以接受的。

代码部署

cmd、powershell和WSL

Windows下的shell虽然不好用,但是它多啊。在比较了cmd、powershell和WSL之后,我选powershell!powershell在难用(cmd)和容易配置(WSL)之间取得了良好平衡。

Powershell系统自带的terminal十分害眼,我们需要一个新的terminal。terminal网上推荐的比较多的是cmder。这个东西很全,有很多我不需要的东西,所以我选conemu(cmder是conemu披上了马甲)。如果跟我一样选了conemu的话,记得手动装个git

Powershell虽然还是不如zsh好用,但基本上达到了日常使用要求。我的powershell配置步骤就是:

  1. 下载安装conemu;
  2. 下载安装git。

这样基本的配置工作就完成啦。

Windows开启ssh

如果升级到新版本(具体啥版本我也不知道)系统内建有ssh,具体配置可以看[这里]。一般默认都是打开了的。需要避开的坑有:

  1. 记得关掉防火墙!!!!!!或者放行22端口;
  2. 可以ssh localhost先试一下用户名到底是什么,一般是用户文件夹的名字;
  3. 用Windows账号登录的话,密码是Windows账号的密码!!不是PIN码!!!不是PIN码!!!
    ### 使用sftp部署代码
    我用PyCharm写代码。PyCharm Professional版有一个非常好的功能就是可以用sftp部署代码(薅资本主义羊毛时间:学生可以去申请免费的license),如果跑代码的机器是Linux系统的话还能远程调试(Windows就别想了)。具体部署方案很多,这个就是很好的一个。现在就可以开始愉快地写代码啦!这样写完就可以一键推到Windows上,除了不能调试之外一切完美!但是我们可以用jupyter notebook!

为了方便起见,我们最好设置jupyter notebook使用密码登录:

jupyter notebook password

在Windows下输入:

jupyter notebook --no-browser

Jupyter notebook的端口一般是8888,我们把Windows的8888端口映射到本机的8889端口,在你的Linux终端输入:

ssh -N -f -L localhost:8889:localhost:8888 gzr19@192.168.31.186

开启了TensorBoard服务的话也可以这样搞,把6006端口映射到本机的whatever你喜欢的端口。


多说一句,PyCharm下最佳color scheme是Dracula

这里还是说一下Windows下的一个小坑。

Linux下路径是用斜杠分隔的,但是Windows下是用反斜杠。我测试了一下,这个斜杠和反斜杠问题不大,你写斜杠的话Windows也是认的。坑在于,要是你头铁非要用反斜杠的话,Windows下,如果你的文件名开头是n或者是t,会跟前面的反斜杠视作一体,被转义成换行符或者空格。