2016012128

来自iCenter Wiki
跳转至: 导航搜索

2017年6月30日

试用PYNQ板

阅读Python示例代码

完成调试pynq audio部分


2017年7月1日


今天延续昨天的教学实验,进一步完成了usb_webcam 和opencv_filter_webcam的例子运行。

通过对pynk板进行调试,将其输出接口与显示器相连接,运行代码即可以拍摄出照片,还可以将照片属性进行改变,旋转或转换成黑白轮廓,得到处理后的图片。

我们可以从这几个例子中看到利用python代码可以控制pynq板实现功能,显示器或者耳机只是提供输出端的途径。

下午我们首先听了老师对两个pdf文件的解读,大致明白了利用tensorboard对数据进行训练的原理,然后使用tensorflow来训练系统,识别图片。远程连接电脑并下载了dota(为了利用速度更快的GPU)之后用cmd执行了tfExample文件,进行了简单的操作,在tensorbroad上显示出了最终结果,一个十维向量在三维的表示。

在老师的讲解和助教对代码的解读之后,我明白了tensorflow对图形化界面的识别其实是一个反馈调节的过程,不断修改权重分布, 最终能将输入数据进行分类。这与代数中的矩阵运算相关,其实是一个强行计算的过程。学习的次数越多,分类识别越精准,正是深度学习次数太少,我们点击一个九,会看到七等数字也被化为同类,这就说明反馈的过程是存在一定的容错性的。如果这个反馈进行上万次,深度学习就会更加精准,应用范围也是非常广的。


2017.7.2


学习内容 上午主要是了解神经网络的具体内容。老师先讲了神经网络的发展历史,分类,一些典型代表,包括谷歌的CLDNN,CTC模型还有LSTM,我们的网络主要就有CLDNN和LSTM还有一些其他部分构成。用到的函数库是keras,这是一个TensorFlow的封装版,使用更加方便,可以免去很多tensorflow的麻烦。 深度学习不仅要能够对数据有很好的拟合,还要防止过好的拟合,即过多的学习也不是好的,因为训练用的数据是有限的,对实验数据拟合的过好之后,可能对真实数据拟合的不好。

操作内容 首先要安装keras,从gitlab上下载数据,其中两个代码涉及到地址的内容改成当前所用地址,然后跑这两个代码,开始训练,进行运算。样本来自我们前几天自己录的音,不同的是被老师加上了很多背景白噪声,大幅度增加了样本量,实现了“增强学习”的目的。将样本分割成两部分,分别放在两个不同的文件夹里,自主选择一部分用作训练,另一部分用作测试。程序在运行时需要安装cudnn,对gpu进行加速,否则程序会运行失败,尝试安装cudnn,因为计算机中没有vs,所以导致一个组件安装失败,cudnn就整体安装失败,在取消vs组件的安装勾选之后,安装成功。 然后要按照教材上的说明来进行,遇到的一个问题是,gpu版本的tensorflow必须要安装cudnn库和cuda软件对gpu进行加速,配套的是cuda的版本8.0和cudnn的5.1版本,但是提供的cudnn版本是6.0,系统不支持,所以从网上下载了cudnn5.1版本之后,放在NVIDDIA/CUDAv8.0/bin目录下就可以运行了。

上午在跟partner操作时对一些细节原理及代码识别出产生不理解,导致在运行过程中一直有报错,助教也一度很懵。在工作站上运行也出现了很多问题,主要是10054和10061错误,我的那台笔记本远程连接但是没电了,我忘记带充电器了,而partner的电脑始终连接不上,上午的工作被迫暂停。

下午在助教的帮助下,我们重新一点点把东西都安装好了,代码上一开始没有改或者说没改好的地址也改到了正确的路径,数据也分好了test和train两个部分,也放弃了远程连接,直接用显示屏显示,然后就是等待训练数据,修改参数。网络正确率走的时候已经过半。一晚上的时间准确率会提高很多。


2017.7.3

今天主要任务是实现在Android系统上的语音识别,要利用Android studio编写程序,然后将连接到手机上,在手机上形成app实现简单的语音识别。

其中利用到Keras, Tensorflow, Android Studio等,而代码则由已给予及经过老师指导与给与的资源指引下自己尝试操作并最终经由Android Studio生成一个.apk文件以在手机上实现App形式的以文字形式输出的语音识别。在运行过程中,会遇到很多问题,比如说操作都没有问题,且在android studio运行过程中也不报错,一直显示finished,但是却不能生成.apk文件,这一度让我们很绝望,最后的解决方法是,助教将所有的下载文件都删去,重新下载命名,放在该放的地方,步骤又来了一遍,我认为困难可能来自我们的文件下载太多次又一直移动,在找文件的时候出现差错,另外只有在连接手机时才会生成apk,最后我们把app安装到手机上,发现它的识别能力相对其他组是很好的,几乎不会出错,看到我们做出来了成果,还是很有成就感的,在这个过程中有很多弱智的bug,向大家主动询问,寻求帮助是很必要的,这其实也是个学习的过程,深深地感受到自己在程序操作上的不熟练。


2017.7.4

学习内容 自己处理生成新的pb文件,成为model,替换掉原来的文件做成新的app,其实就是重演昨天那个代码。

操作内容 首先将计算的生成的“图”画出来,就是神经网络的结构,其中是没有权重的。其次再将权重加载,然后填充进去,生成新的pb文件,然后将文件freeze一下,也就是冻图,将variables转换为constants,就会获得最终的文件。 早上的时间几乎都是在磕绊中进行,不明所以的摸索,最后请教了助教,助教手把手教学让我们明白了其中原理,遇到困难还是要多寻求帮助。 将新生成的pb文件替换掉就有的pb文件,之前一直无法通过,之后发现我们没有更改一些代码,在看资料的过程中还是不够仔细,在手机上生成之后,对输入录音的判断非常不准确,发现输入同样的语句,输出结果虽然不正确,但是总是集中在几个循环。我们又认为可能是过学习的结果,所以就测试了之前的epoch较少的版本。结果是这些版本识别准确度也很低。经过一段时间的思考之后,可能是代码不能正确的把权重输入文件,那么就可能是系统产生了权重并将其加入了model之中。 我们这一组一直有个比较大的问题就是apk文件总是因为这样那样的原因不被build出来,后来我们才发现build功能有直接生成apk的,也算是学到了一个小技巧。