《Neural Networks and Deep Learning》一书的中文译名是《神经网络与深度学习》,书如其名,不需要解释也知道它是讲什么的,这是本入门级的好书。
在第一章中,作者展示了如何编写一个简单的、用于识别MNIST数据的Python神经网络程序。对于武林高手来说,看懂程序不会有任何困难,但对于我这样的Python渣则有很多困惑。所以我对做了一些笔记,希望同时也可以帮助有需要的人。
[原创] 在树莓派上把文字转成语音(Text-To-Speech/TTS)
本文软硬件环境:
树莓派:3代 Model B V1.2,内存1GB
OS:Arch Linux ARM
有时候,我们需要在程序中添加文字转语音的功能,即通过某个程序或API,把输入的文字朗读出来,也就是通常所说的 text-to-speech(简写为TTS)。我尝试了一个简单的方案——使用Espeak来完成这个任务,在这里记录下来。
[原创] 加快TensorFlow在树莓派上的执行速度——服务常驻内存
本文软硬件环境:
树莓派:3代 Model B V1.2,内存1GB
OS:Arch Linux ARM
在上一篇文章中,我尝试了加快TensorFlow预测速度的一个方法——模型“预热”,实验证明它非常有效,但那仍然没有解决一个问题:每次运行程序,都要加载一次模型,然后预热N次,这个过程非常耗时,因此减少这部分时间也是非常关键的。把TensorFlow做成一个常驻内存的服务就可以解决这个问题。
解决这个问题的正确姿势是:TensorFlow已经提供了一个叫作 TensorFlow Serving 的library来实现这个需求。但麻烦的是,在树莓派上编译TensorFlow Serving会遇到很多问题,所以,在没有人搞出在树莓派上一键安装的Python wheel包之前,还是算了吧...
因此,下面我用一个很挫的办法来实现一个简陋的TensorFlow service。
[原创] 在树莓派上用TensorFlow玩深度学习(Deep Learning)
本文软硬件环境:
树莓派:3代 Model B V1.2,内存1GB
OS:Arch Linux ARM
深度学习(Deep Learning)现在这么火,树莓派玩家们当然也不会放过,目前已经有很多树莓派项目都搭上了Deep Learning的车,纯粹出于“好玩”的目的,我在树莓派上也实验了一把,用TensorFlow来识别一张图片里的物体“是什么”。
[原创] 在树莓派上使用触摸开关(touch switch)
触摸开关/触摸传感器/轻触开关,是一种通过轻触就可以实现开关的电子器件,生活中随处可见,很多家用电器的操控界面都是触摸开关。
本文中的触摸开关,是在树莓派OS运行的情况下,用来触发某个动作(例如,触摸的时候控制摄像头拍照)。
[原创] 树莓派3代Model B上手
最近入手了树莓派3代,从树莓派出世到现在(2016.04),总共买了共4片各型号的树莓派,算不上狂热的爱好者,但也算是个比较热心的用户了吧。
在此记录一些树莓派3代的使用笔记。
[原创] 解决错误“class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package”
这是一个jar包冲突引起的Java程序错误,而且是runtime的错误,编译的时候不出错,一运行起来就挂。
[原创] 在IntelliJ IDEA中使用插件查看Maven conflict
如果Maven引入的jar包有冲突,可以使用IntelliJ IDEA的Maven Helper插件来帮助分析。
下面以IntelliJ IDEA 15.0.3为例,说明如何安装及使用这个插件。
[原创] 用人话解释机器学习中的Logistic Regression(逻辑回归)
友情提示:如果觉得页面中的公式显示太小,可以放大页面查看(不会失真)。
Logistic Regression(或Logit Regression),即逻辑回归,简记为LR,是机器学习领域的一种极为常用的算法/方法/模型。
你能从网上搜到十万篇讲述Logistic Regression的文章,也不多我这一篇,但是,就像我写过的最优化系列文章一样,我仍然试图用“人话”来再解释一遍——可能不专业,但是容易看得懂。那些一上来就是几页数学公式什么的最讨厌了,不是吗?
所以这篇文章是写给完全没听说过Logistic Regression的人看的,我相信看完这篇文章,你差不多可以从无到有,把逻辑回归应用到实践中去。
[原创] 为树莓派添加 DS1302 实时时钟(硬件时钟)/ Add a DS1302 RTC for RPi
『1』软硬件环境
本文适用于:
Raspberry Pi:Model B/B+(已测),其他型号理论上也可以,只不过可能要修改一下后面说到的shell脚本中的端口号
OS:Arch Linux ARM
『2』实时时钟与树莓派的关系
树莓派为了节约成本以及减小体积,没有板载的实时时钟(real-time clock,RTC),或者叫硬件时钟,因此,如果你没有配置过树莓派自动从网络同步时间的话,或者就算你配置好了自动从网络同步时间、但没有网络可用的话,那么,你设置好的系统时间,在重启树莓派之后就会丢失。而我们家用的电脑之所以在开机之后时间仍然正确,是因为电脑主板上有实时时钟。
[原创] 在Github上添加SSH key
如果你在Github上有一个项目,为了能让这个项目可以在多台计算机上开发,需要把目标计算机的SSH key添加到你的Github账户中,否则你以SSH方式git clone时会提示无权限,例如你可以试试:
git clone git@github.com:codelast/raspberry-pi.git
会输出类似于这样的错误信息:
Permission denied (publickey).
文章来源:http://www.codelast.com/
所以下一步就要在Github中添加SSH key,让你可以在目标计算机上进行开发以及代码提交。
其实Github上已经有完整的教程了,只不过我记性不好,每次都要去翻Github教程,所以特地写下来。
✔ 检查SSH key是否已经存在
检查文件 ~/.ssh/id_rsa.pub 是否存在,如果存在,就不用生成一个新的SSH key了,直接跳到下面的第3步。
如果该文件存在,但你不想使用它的话,那么就按下面的做法另外生成一个文件也可以(例如 ~/.ssh/id_rsa_github.pub)。
文章来源:http://www.codelast.com/
✔ 生成一个新的SSH key
如果第1步中的SSH key不存在,则需要生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
其中,your_email@example.com要修改成你的邮箱地址。
回车后输出如下:
… Read MoreGenerating public/private rsa key pair.
[原创] 让ThreadPoolExecutor的workQueue占满时自动阻塞submit()方法
使用Java的ThreadPoolExecutor可以并发地执行一些任务,它的基本用法是:
(1)创建一个 ThreadPoolExecutor 对象
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(workQueueSize));