早晨起床看邮件,发现收到了水果发来的WatchKit框架发布通知,遂中午下课马上开始看框架,发现WatchKit暂时作为一个iPhone App的Extension,还算是比较简单,Apple Watch只负责显示,一切计算都由iPhone完成。但是粗略读了文档后相信水果肯定会把Apple Watch逐步打造为一个独立平台,毕竟这个框架还是beta版。
Python-MySQLdb 教程
Published at发布于::
|
Reading阅读::
2 min
Python操作MySQL,一个常用的方案就是使用MySQLdb库,安装在之前的日志已经介绍过了: Mac下新安装的MySQL无法登陆root用户解决方法
下面我们来看看如何使用Python操作MySQL,基本逻辑分为四个步骤。
包含MySQLdb库 1 import MySQLdb 与MySQL建立连接 1 conn = MySQLdb.connet(host='localhost', user='root';, passwd='root", db = 'euryugasaki', port=3306) connect()方法用来提供与MySQL的连接,接受多个参数,返回连接的对象: host: 数据库主机名,默认是本地主机 user: 数据库登录用户,默认是当前用户 passwd: 数据库登录密码,默认是空 db: 使用的数据库名,没有默认值 port: MySQL服务使用TCP端口,默认3306
连接对象提供了对事务操作的支持,标准方法有: commit() 提交 插入更新数据的时候一定要执行commit()否则不能真正的插入数据。 rollback() 回滚
运行SQL语句并接受返回值 1 2 cursor = conn.cursor() n = cursor.execute(sql,param) 我们需要使用连接返回的对象获得一个cursor对象,并使用cursor提供的方法来进行工作。这类方法包括两大类: a) 执行命令 callproc(self, procname, args): 用来执行存储过程,接受的参数为存储过程名和参数列表,返回值为受影响的行数. execute(self, query, args): 执行单条SQL语句,接受的参数为SQL语句本身和使用的参数列表,返回值为受影响的行数. executemany(self, query, args): 执行单条SQL语句,但是重复执行参数列表里的参数,返回值为受影响的行数. nextset(self): 移动到下一个结果集 b) 接受返回值 fetchall(self):接受全部的返回结果行.
谈谈 CV
Published at发布于::
|
Reading阅读::
1 min
谈CV,其实只需要从著名的Image Net Challenge说起就已经足够了。
多年前, CV的data set都非常非常小,几百个category几万张image已经顶天了,使得无法设计complex vision model。否则由于模型复杂度太高,data set太小,最终只能Overfitting。
2012年的时候,有个叫Feifei Li的女士人发起了巨型数据库ImageNet。如今ImageNet上已经有了接近1500W张图片了。每张图都是人工记录图片中物体的名字,并向全世界宣布:同学们,你们谁开发出了新的Object recognition算法,就在这个数据库跑跑看吧。 所以,2012年的时候,就有了 Large Scale Visual Recognition Challenge,而比赛的结果会放在每年年底的NIPS公布。 当时大多数“科研工作者"还在用传统的computer vision算法时,DL大牛Hinton放出大招——DeepNet。
差距是这样的:
第一名DeepNet的error rate是0.16422 第二名是日本东京大学,error rate是0.2617 第三名是牛津大学,error rate是0.2679 其实仔细对比第二三名的具体实现,他们使用的技术框架都非常接近,基本上就是传统的local descriptor+feature compression这一套。而在这套实现上,两者的差距几乎是可以忽略的——看看DeepNet的error rate就知道了。
当时Hinton大神就放话了:“你要是没有参加前十几年的NIPS,没有关系,因为DeepNet今年才开始真正的work了”。虽然DeepNet如此牛逼的效果,但是很多的“业内人士”就觉得很不爽了,觉得这玩意儿简直就是扯淡。我觉得可能有下面几个原因:
DeepNet很可能只是Overfitting,因为参数实在是太多了…6KW+ DeepNet实际上是一个黑箱,还不能从理论上详细分析里面到底在干嘛,对CV的贡献可能很有限。 DeepNet只能解决Object recognition这一个问题,而想要做到Object detection、segmentation这些基本问题,基本上也就残废了。 其实,在0.5个百分点的performance提升都可以被顶级会议收录为“major contribution”这样的一个时代,被一个和最近十年computer vision尤其是object recognition领域的进展几乎没有任何交集的方法超过了十个左右的百分点,难免出现大众不接受的情况。但是,一场“革命”却已经开始了。
一年后,2013年,新一轮的large scale visual recognition challenge又开始了,这时候,DeepNet却已经统一江湖了:排名第一的算法,在没有额外的traning data的情况下,跑到了error rate 0.1174这样的成绩。
这个成绩是这样的:随机挑选一张图片,扔给算法去跑,算法返回五个结果。如果有一个结果猜对了,那么就算作正确。也就是说,如果允许瞎猜五次,第一名已经能够拿到90%的准确率。注意,这里的object category有两万多种,几乎覆盖了所有类别。
那么,DeepNet的瓶颈在什么地方呢?看看CVPR14paper的title and abstract,CV圈子里在两个方面做improvement,但是却没有push。最终搞得DeepNet越来越像一门具有浓烈性质的实验学科,大概就是这个样子:
如果对2012年Hinton大神的架构修改太多,将会出现各种惨不忍睹,各种毁于一旦。 很少人有强劲的数学功底能够从理论上分析DeepLearning到底在干嘛,而即便是有强劲数学功底的那些人估计也看不上这套理论。 可惜,图片数量实在是太过庞大,从工程上来看,在几周或者几天时间内完成百万级甚至千万级的Image data,真的是太难太难了。 这样的话我更有理由去相信:只要愿意花时间,一个本科学生train出来的DeepNet和那些在Google百度工作了积累了十几年经验的工程师、教授train出来的,没有太大区别。
不知今年的结果不知道怎么样,得等到12月份的NIPS14了。也不知学术界什么时候能够找对方向,结束这个目前以实验报告为成果展示的探索阶段,从理论上,从根本上解释这个被“炒”得“伟大”的理论究竟为什么如此奏效。
参考与进一步阅读
ImageNet Large Scale Visual Recognition Competition 2012 ImageNet Large Scale Visual Recognition Competition 2013 Conference on Computer Vision and Pattern Recognition 2014 https://code.
简单的日志分析
Published at发布于::
|
Reading阅读::
1 min
今天听P哥说写了个爬虫抓我网站玩,所以就比较好奇分析了一下P哥来抓我网站的一个行为。
其实听着分析很高端的样子,本来我打算用python写个脚本的,后来一想干脆就用awk算了,也就简单分析一下,等以后有时间部署个分析平台。
这是日志格式:
1 2 3 4 5 6 218.5.46.14 - - [26/Jun/2013:19:21:28 +0800] "GET / HTTP/1.1" 200 1115 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" - 218.5.46.14 - - [26/Jun/2013:19:21:29 +0800] "GET /favicon.ico HTTP/1.1" 404 564 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" - 218.5.46.14 - - [26/Jun/2013:19:21:45 +0800] "-" 400 0 "-" "-" - 220.181.126.47 - - [26/Jun/2013:19:29:02 +0800] "GET / HTTP/1.
图书馆真是越来越无趣了
Published at发布于::
|
Reading阅读::
1 min
第一次有图书馆概念的时候是初中,还是从数学老师那儿听来的,当时为了能够进去借书,好像还费了点儿功夫,记得初中的图书馆是不能在书架(虽然只有不到二十个架子的书)上直接查阅的,管图书馆的老师会给你一盒卡片,卡片上只写了图书的名字,看上了,就把卡片取出来,让老师进去取,而且只能借一周,否则就得罚钱,作为一个连零花钱都得申请的小朋友当时真是深感忧伤。不过想想当时在这种规模的图书馆能够借到北大文革时期的高等代数的教材,也是觉得很幸运,也不知道现在图书馆拆了没有。
高中就没有图书馆了,所以那段时间我一再怀疑是不是高中还没有初中牛逼。没有图书馆,就让我养成了一个比较“坏”的习惯:买书。
我似乎是那座县城里面比较早使用淘宝的人,初三的时候为了买魔方,才好不容易从我妈成功申请允许我办网银。然后才发现淘宝是一个逆天的玩意,所以从那以后我的所有数学书都是从淘宝上获取的。记得高二那会儿听网友说陈天权编了一本逆天的数学分析,果断就淘了一本回来,确实碾压以前读过的欧阳光中编的数学分析。作为一个爱买书胜过爱看书小朋友,如果本本书都自己买,实在是没有那个经济能力。所以后来准备高考,也就收敛了许多。
到了大学里,对图书馆的激情一下子又被调动了起来,大二以前,几乎一有时间就会往图书馆跑,尤其是大一,那会儿就如同乡巴佬进城,对大学图书馆的向往简直是无法言喻——太特么大了,看到满架子都是自己感兴趣的书,真是一件超级爽的事情。尤其是高二那会儿去长沙比赛的时候,到中南的图书馆仅仅短暂走了两圈,简直感觉就像进了天堂。而今天经过图书馆的时候,我实在是提不起进去的兴趣了,我觉得可能有几个原因:
图书馆资源相对陈旧,我感兴趣的图书多半早就已经读过至少一遍,或者已经自己买过了。
自己有了电脑并且拥有了能随时接入互联网的能力,还并具备轻量级的经济能力,图书馆资源的更新速度之缓慢实在是无法满足自身的需求了。借书?太慢了,还不如我上午下单,下午收货来得愉快。甚至,图书馆还不一定有。
毕竟是借的书,不能在书上“乱写乱画”,我有个癖好就是会把自己的一些想法附注在书的旁边(从费马那偷来的),所以这样的书也只能读读,不能把东西真正变成自己的,即便是摘抄下来。
图书馆对我而言现如今更像是一个能安静的看书的地方,但是,这样的话图书馆不就失去了它坐拥海量资源的优势了吗?说到底,还是信息化又在逐步干掉另一个“百年老树”了。
The worst Presentation
Published at发布于::
|
Reading阅读::
1 min
这是最糟糕的一次pre。想想之前我还饶有兴致的做着可能是这辈子最认真的keynote,各种神奇的特效,而实际收获的效果为零。
首先答辩的整个scene就很随意,在整个pre还没有正式开始之前我,我大致说明了一下,内容是:“这次pre的内容可能有点多,所以我可能语速有点快,如果有没听清楚的内容,及时打断我,这次pre的内容主要包括一下几个方面:……”…“我说一下,你注意主要围绕xxx说一下就行”…………无情的被插话,而且是完全无视我之前说了什么的插话,明明我正在说的就是你插话的内容。瞬间我想到了罗永浩的嘴脸。
所以我决定保持风度,像自如老大一样。但是内心仍然是非常的不爽,于是我果断决定切换到准备的第二套pre方案。
开始讲近场定位,本来这里有很多关于hci的idea,但是没有说出口,我知道说了和没说其实是一样的,所以干脆也就咽了下去。讲完后:”关于这里有疑问吗?“,我好像听到了有小声说了一句:”这家伙说的到底是什么东西?“………………what are you doing before?
开始讲machine learning和deep learning了,这是我最自豪和得意的part,但是我猜想除了周老师其他几个老师可能根本不懂我在说什么。
还真的是这样,开口就说我不知道convergence还怎么做这个algorithm。
我甚至怀疑ta到底不知道basic statistics model,开口就喷,也是醉了,我在keynote里提到convergence还不明确,这是诚实,看看那些诡异的才push 0.5个百分点的conference paper,他们什么都不说,研究paper的时候我也只有一路呵呵。
刚开始我还抱有幻想,尝试去解释清楚让ta理解为什么这个算法的convergence在theoretic analysis还做不到,说了一半我放弃了,whatever。
我想,关于cloud computing的idea全完没有传达,这部分的关键性idea才是这个project真正有趣的地方。可是得到的是不断提醒我注意时间,我想我也是醉了…明明才讲了五分钟不到…………………………说好的十分钟呢…能听我讲完吗?能听我说一句吗?明明时间花在了你们提问上,我的语速已经够快了………
最后强调了一下所有的result都会用GPL到我的homepage上,但我知道我的homepage不会有任何额外增加的UV,就像之前我描述他们现场行为表现的那样。
我猜想我可能get到了真相,其实nobody cares what are you create, what is the most creativity idea for the project, they just wanna finish this early.
又或许是我自作多情了,有点过分看重pre了,but I did all this seriously, at least.
好吧,我这个吐槽的习惯不好,对不起。
关于 Riemann
Published at发布于::
|
Reading阅读::
1 min
从数学的角度看,超越时代的人不在少数,就我最喜欢的,是黎曼。 我相信,任何对黎曼有一点了解的人都必定会承认他是一个天才,而任何看过他手稿的数学家必定会惊叹不已。
黎曼只活了39岁就病死了,是高斯的关门弟子。他这一生的成就就不在赘述,度娘和谷歌可以帮你了解。我只讲他的一点,也是最为人所知的,就是那个到现在都没有解决的黎曼猜想。
黎曼猜想提出到现在大约150年,简单的看来,这只是一个普通的对一个特殊的亚纯函数——黎曼zeta 函数——零点分布的性质的研究,经由欧拉的一个公式和素数的分布联系在了一起。大多数人觉得这只是一个数论里的问题,但重点是
黎曼和他的老师,高斯一样,论文如此简介,有说服力,但却令人完全看不透他是怎么产生的这样卓越的想法,其实,这背后是大量的实际推演,这就体现在他的手稿里。20世纪,计算机出现了,关于黎曼猜想,这时候数学家想用计算机来算出一部分非平凡零点的值,就像物理学家做实验一样。数学家数十年的研究里,总结出来了一套算法,但当要算的零点数目多到一定的时候,发现这个算法的效率实在是太低下。非平凡零点,即使是前几个,都是很难用手算的,尤其是还要达到一定精确程度,但是黎曼的论文中却给出了精确到小数点后五六位的几个零点值,后面有数学家对黎曼残存的手稿进行研究,发现其实黎曼不止算了这几个,而是算了十数个,最终,人们从他的手稿当中找回了黎曼的算法,简直就是天才的想法,其算法比起现有的简洁了不止一点点。凭这一点,超越时代足够了。
如果觉得以上理由不足,那么从黎曼的手稿中,我们几乎可以想象,当时黎曼可能给出了这个猜想的证明,可惜手稿在其去世时大部分被焚毁。但在残存的手稿中,现代数学家看到了那些黎曼尚未发表的定理,这些定理有大部分都是现代数学家没见过的,而部分经过验证,定理都是正确的,而且任意一条放在现代,都会是重要,乃至举世瞩目的数学发现。凭这一点,他足够超越时代了。
如果觉得黎曼不过对于数学来说是超越时代的,那么必须再提到黎曼猜想,当年希尔伯特和波利亚提出了一个猜想,几乎被默认是对的(因为尚未证明),就是:黎曼函数的非平凡零点与某个厄密算符的本征值相对应。这句话意思可能看着迷糊,但粗略的说,厄密算符可以用与表示量子力学的哈密顿量,在简单一点,就是他对应了一个新的量子力学体系,而经典的混沌体系是这个黎曼体系的一个近似。更深入的内容我也不能理解了,但就是这么个亚纯函数,和复杂量子体系,神经网络,等现实的物理图景紧密相连。无疑是自然的奇迹!
综上所述黎曼所创造的工作的一小部分,如果他不算超越时代的人,我想,这世界上就没有几个人算了,即使是乔布斯,也比不上他闪出的一点光辉。
相关参考:《黎曼猜想漫谈》卢海昌著
删除Mac MySQL
Published at发布于::
|
Reading阅读::
1 min
首先要停止MySQL的服务,可在偏好设置中停止其服务,然后执行下列命令
1 2 3 4 5 6 7 $ sudo rm /usr/local/mysql $ sudo rm -rf /usr/local/mysql* $ sudo rm -rf /Library/StartupItems/MySQLCOM $ sudo rm -rf /Library/PreferencePanes/My* $ sudo rm -rf /Library/Receipts/mysql* $ sudo rm -rf /Library/Receipts/MySQL* $ sudo rm -rf /var/db/receipts/com.mysql.* 编辑/etc/hostconfig,删除其中的MYSQLCOM=-YES-这行
大坑,难以置信的大坑!
Published at发布于::
|
Reading阅读::
1 min
上学期构思的项目,到这学期开学,随着逐步的深入,难以置信的不觉触碰到了如此之多的计算机科学的深坑:
项目定位是包含:人工智能、机器学习、计算机视觉、模式识别等高性能统计“智能”算法的集成框架编写等等。 架构的高并行分布式自动集群化部署方案的刚需,于是涉及到了:并行计算架构、集群自动化部署、分布式存储系统、高速缓存引擎架构(海量数据搜索引擎架构)等等。 开发上的各种问题:开发语言的选择(C/C++、Python、Objective-C、Swift)、架构变迁的考虑、开发成本的舍取、项目高质量管理等等。 待续……
从坐公交车想到的和看到的
Published at发布于::
|
Reading阅读::
1 min
序、起因 昨天做公交准备回学校的时候照常在车上掏出手机把玩,不过手机已经只剩下10%的电了,所以没耍几分钟手机就彻底牺牲了。
一路上人非常的挤,没有座位,所以开始猜测面前坐着这哥们儿啥时候下车。不料这哥们儿居然是做到倒数几站的位置,所以还是妥妥站了一路。感觉一路上没玩手机脑子想了很多收获还是挺大的,遂写篇日志记录一下好了。
一、想到的 一路上实在是发呆和蛋疼,脑子着实无聊,便顺带初步构思了一下如何给一个城市部署公交预测系统。
想法的起点源自上车时没抢到座位。公交车来的时候,看着车上空位非常多,可是还是没有抢到座位(丫的全挤在这上了)。一路上车上的人不但没有减少,反而越来越多越来越挤。这要是在前一站上车岂不是还能坐一路回来?所以有了下面的构思。
我们可以考虑“挖掘”一天中一条公交线路上的乘客数据啊,对一些重要的指标进行预测(当然,如果这套系统能够做到实时更新,那么就是最完美的状态了,这时候系统的预测将变得无比的精确,甚至给出一天中任意时刻任意站台的等车方案、最优乘车时间、最优乘车地点、最优……):
任意时刻某站的下一辆公交车到达的等车时间 任意时刻所等站台下一辆公交车的乘客数量 任意一辆公交车在某站的上车、下车人数预测 一天中任意时刻,在某站上车,有空闲座位的概率(这才是重点啊) 等等…… 那么,哪些特征能作为数据挖掘的样本呢?也就是说我们可以记录哪些数据呢?首先,如果我们的人力、物力、财力实在是有限,可以一步一步的来,先做好一步,再考虑进一步挖掘下一步的数据:
一条路线上,每个站点$A_i(i=1,2,…,m)$,在一天中,公交车到达时间的时间序列,$A_i=(t_i1, t_i2, t_i3, …, t_in)$,这样呢,我们就把一天中的整个公交车的时间分布变成了一个$mn$的“时间矩阵”。 我们来进一步细化$t_{ij}$的特征,我们可以视$t_{ij}$为一个四维向量,这个四维向量$t_{ij} = ( arriveTime, getOnNum, getOffNum, emptySeatNum )$,第一个维度是公交车在站台i的第j个到达时间,第二个维度是上车的人数,第三个维度是下车人数,第四个维度是空位的数量(其实可以考虑减掉这个维度来优化数据集,这样的话海量数据挖掘起来更快,另一个原因是由于每辆车的座位数是定值,那么空闲座位数就可以被算出)。当我们把第一步的“时间矩阵”扩张为以向量为元素的矩阵时,我们的数据集一下子就扩大了4mn倍,在数据逐渐猛涨的系统下,挖掘出的结果将会更加刺激。 前两个步骤的数据挖掘我们只考虑了一条公交路线,如果我们要把整个城市的公交路线都考虑进来,我们可以继续给$t_{ij}$增加维度,比如说当前站还未上车时的等车人数(这样的话便可以预测出大概有多少人在等哪一路的车,大幅增加了预测的准确度),又比如说,增加当前站台在城市中的地理坐标,引入城市小区的地理位置,这样的话可以预测出上车的人从哪儿来(小区直接等车?转车导致的等车?)、上车的人要去哪里(回家?还是换乘?)、这条路线上大部分上车的人喜欢在哪儿上车、大部分的人都在哪里下车、等等等等…… 当然我们还可以在人力物力财力允许的情况下进一步优化我们的数据集,这只是最初步初步的想法,限于篇幅这里就不继续展开我的思路了…
那么,我们有了这些数据又怎么样呢?一方面,我们可以更加精确的预测整个城市的人口流动情况,另一方面,我们可以这些数据为蓝本,给城市公交建设提出一些可靠的意见和建议,再有,把这个数据集成到一个app中,给人们提供参考,也是很棒的。
二、看到的 在构思上面系统的同时,还观察了旁边一个妹子在刷空间的互动行为。这个妹子确实勤快,我看了她一路,居然每条说说都回复了,确实强大…不过,根据对妹子表情的观察,我更好奇这个妹子的每条回复究竟是什么心态。
假设我们发了一条说说,如何判别一条别人的回复对这条说说的态度是持“点赞”多一点?还是反面多一点?
解决这个问题其实很简单,一个非常非常平凡的思路就是:我们可以先收集一堆已经被标记为正负面的评价的回复作为数据挖掘的数据库。
那么,第一个问题就是,怎样量化回复的正负面?
所以我们可以尝试准备一个词汇向量(这个向量的维度可以很大很大,甚至囊括所有的词汇),比如假设我们构造一个非常基本的向量:a = (“好”,“差”,“喜”,“讨”,“欢”,“厌”),然后对一个回复,比如回复了一句“好喜欢”对应01向量就是:(1,0,1,0,1,0),把一条回复转化成的向量记为a=(a1,a2,…,an),怎么表达正反面呢?既然只有两个层次,问题就变得非常简单了:找一个函数f能够使得f(a)>0,那么我们就认为是正面的回复,如果f(a)<=0,就认为是负面回复了。
怎么找这样的函数?最简单的办法自然是利用向量的点乘了,用点成来界定向量,我们可以尝试寻找一个标准向量X = (x1, x2, …, xn),如果我们将回复转化成的向量a∙X^T>0,那么这条回复就更倾向于点赞,相反,a∙X^T≤0的回复就更负面一些。
至于具体如何求出x1,x2,…,xn这些参数,那就是另一个话题了