big_uncle

Results 105 issues of big_uncle

# 符号说明 符号|含义 :--:|:--: m|训练样本的数目 x|特征/输入变量 y|目标变量/输出变量 (x,y)|训练集中的实例 h(hypothesis)|学习算法的解决方案或函数 # hypothesis function ![image](https://user-images.githubusercontent.com/35989223/53882086-4de62300-4050-11e9-8ccb-0cc18abbe29a.png) # 代价函数 如何确定hypothesis function中的两个参数呢?如何评估这个函数的效果是否好呢?需要用到代价函数(cost function): 我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数为: ![image](https://user-images.githubusercontent.com/35989223/53880045-f09ba300-404a-11e9-97ef-63dd78352a87.png) 代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。 还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。 ![image](https://user-images.githubusercontent.com/35989223/53880099-19bc3380-404b-11e9-8012-21891bab35e6.png) # 梯度下降 梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数的最小值。 ![image](https://user-images.githubusercontent.com/35989223/53880655-7ec45900-404c-11e9-9800-cad05c8ae9b1.png) 想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。 批量梯度下降(batch...

AI

重装了电脑之后突然想尝试一下最新版的keil MDK,之前一直用的是MDK 520版本,这次直接升级到了MDK 526版本。 新版本其他都还挺好,但就是调试的时候会跳出这样一个提示框: ![image](https://user-images.githubusercontent.com/35989223/53714615-13328e00-3e8a-11e9-8a24-f7967ee99696.png) 出现提示框不久调试就会自动终止,调试起来非常费劲。 百度了一下发现是因为高版本的MDK自带的jlink驱动与jlink调试器里面的驱动版本不兼容,需要手动更换驱动。 只需要把驱动下载下来,解压,用里面的文件替换掉keil安装目录下的`ARM\Segger\`文件夹里的同名文件,就行了。 # 下载地址 点[这里](https://download.csdn.net/download/breakingdawn0/10700757)下载。

RM
tools

机器学习分为两大类:**监督学习**和**无监督学习**。 # 监督学习 假如这里有一些房价的数据。你把这些数据画出来,看起来是这个样子:横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。 ![image](https://user-images.githubusercontent.com/35989223/53692055-27ac5300-3dc4-11e9-819c-bd15783ec469.png) 我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线(上图中品红色线),根据这条线我们可以推测出,这套房子可能卖150,000$。 当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线(上图中蓝色线),我们可以从这个点推测出,这套房子能卖接近200,000$。 可以看出,监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。 回归这个词的意思是,我们在试着推测出这一系列连续值属性。 监督学习基本思想是,我们数据集中的每个样本都有相应的“正确答案”。再根据这些样本作出预测,就像房子和肿瘤的例子中做的那样。我们还介绍了回归问题,即通过回归来推出一个连续的输出,之后我们介绍了分类问题,其目标是推出一组离散的结果。 学习算法可以处理两种问题:**回归问题**和**分类问题**。假设有一个公司,想开发学习算法解决下面两个问题: 1. 你有一大批同样的货物,想象一下,你有上千件一模一样的货物等待出售,这时你想预测接下来的三个月能卖多少件? 2. 你有许多客户,这时你想写一个软件来检验每一个用户的账户。对于每一个账户,你要判断它们是否曾经被盗过? 问题一是一个回归问题,因为你知道,如果我有数千件货物,我会把它看成一个实数,一个连续的值。因此卖出的物品数,也是一个连续的值。 问题二是一个分类问题,因为我会把预测的值,用 0 来表示账户未被盗,用 1 表示账户曾经被盗过。所以我们根据账号是否被盗过,把它们定为0 或 1,然后用算法推测一个账号是 0 还是 1,因为只有少数的离散值,所以我把它归为分类问题。 以上就是监督学习的内容。 # 无监督学习 在无监督学习中,不同于监督学习的数据的样子,无监督学习中**没有任何的标签**。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做**聚类算法**。...

AI

吵了近一年的机器学习入门计划终于下地了,从今天开始学习机器学习,之后入门深度学习,进入人工智能领域。 机器学习部分学习参照的是目前最为火爆的吴恩达的机器学习教程,浅显易懂。机器学习会涉及到很多数学知识,但吴恩达的教程是众多教程中最为对新手友好的,他尽力地不过多地涉及繁杂的数学知识,专注于讲解机器学习的原理,且循循善诱,步步深入,一看就停不下来。 该系列总结同时参考了该门课程的翻译者黄海广博士的[个人总结](https://daniellaah.github.io/2016/Machine-Learning-Andrew-Ng-My-Notes.html)。 好,机器学习就此开启吧! --- 机器学习是目前信息技术中最激动人心的方向之一。我们每天都在不知不觉中使用机器学习的算法。 每次,你打开谷歌、必应搜索到你需要的内容,正是因为他们有良好的学习算法。谷歌和微软实现了学习算法来排行网页。 每次,你用**Facebook**或苹果的图片分类程序他能认出你朋友的照片,这也是机器学习。 每次您阅读您的电子邮件垃圾邮件筛选器,可以帮你过滤大量的垃圾邮件这也是一种学习算法。 对我来说,我感到激动的原因之一是有一天做出一个和人类一样聪明的机器。实现这个想法任重而道远,许多**AI**研究者认为,实现这个目标最好的方法是通过让机器试着模仿人的大脑学习。 为什么机器学习如此受欢迎呢?原因是,机器学习不只是用于人工智能领域。 我们创造智能的机器,有很多基础的知识。比如,我们可以让机器找到**A**与**B**之间的最短路径,但我们仍然不知道怎么让机器做更有趣的事情,如**web**搜索、照片标记、反垃圾邮件。我们发现,唯一方法是让机器自己学习怎么来解决问题。所以,机器学习已经成为计算机的一个能力。 这里有一些机器学习的案例。 比如说,数据库挖掘。机器学习被用于数据挖掘的原因之一是网络和自动化技术的增长,这意味着,我们有史上最大的数据集比如说,大量的硅谷公司正在收集**web**上的单击数据,也称为点击流数据,并尝试使用机器学习算法来分析数据,更好的了解用户,并为用户提供更好的服务。这在硅谷有巨大的市场。 再比如,医疗记录。随着自动化的出现,我们现在有了电子医疗记录。如果我们可以把医疗记录变成医学知识,我们就可以更好地理解疾病。 再如,计算生物学。还是因为自动化技术,生物学家们收集的大量基因数据序列、**DNA**序列和等等,机器运行算法让我们更好地了解人类基因组,大家都知道这对人类意味着什么。 再比如,工程方面,在工程的所有领域,我们有越来越大、越来越大的数据集,我们试图使用学习算法,来理解这些数据。 **手写识别**:现在我们能够非常便宜地把信寄到这个美国甚至全世界的原因之一就是当你写一个像这样的信封,一种学习算法已经学会如何读你信封,它可以自动选择路径,所以我们只需要花几个美分把这封信寄到数千英里外。 事实上,如果你看过自然语言处理或计算机视觉,这些语言理解或图像理解都是属于AI领域。大部分的自然语言处理和大部分的计算机视觉,都应用了机器学习。 学习算法还广泛用于自定制程序。每次你去亚马逊或**Netflix**或**iTunes Genius**,它都会给出其他电影或产品或音乐的建议,这是一种学习算法。仔细想一想,他们有百万的用户;但他们没有办法为百万用户,编写百万个不同程序。软件能给这些自定制的建议的唯一方法是通过学习你的行为,来为你定制服务。 最后学习算法被用来理解人类的学习和了解大脑。

AI

偶尔会遇到要上Google Play下载APP的情况,但是Google Play上电脑还不能直接下载,我搞到Google账号之后,居然需要绑定移动设备,太麻烦了。 之前我一直用的是**apkpure**,但后来它也挂了,没办法。 后来我再Chrome应用商城中发现了一个叫[**APK Download**](https://chrome.google.com/webstore/detail/apk-downloader/fgljidimohbcmjdabiecfeikkmpbjegm?hl=zh-CN)的扩展应用,直接复制应用下载界面的url就行了。 ![image](https://user-images.githubusercontent.com/35989223/53690404-d50f6e80-3da4-11e9-94f0-64d74e36cbd3.png) 此外还可以使用[这个链接](https://apps.evozi.com/apk-downloader/)在线下载,不用安装扩展应用。

tools

最近接了一个小项目,其中一个内容就是驱动步进电机。我就地取材选择了非常普遍的**J-4218HB2401两相步进电机**,搭配**TB6600驱动器**进行控制。 其实也没啥好总结的,都加上驱动器了,那自然是非常方便,这里就简单记录一下。 步进电机因为是两相的,一共有四根线引出来,分别是A+,A-,B+,B-,驱动器外观和接口如下图所示: ![image](https://user-images.githubusercontent.com/35989223/53472863-d2123680-3aa3-11e9-898f-747a3f7d6a46.png) 驱动器上的接线如下: 接口名|接线 :--:|:--: PUL+|脉冲信号输出负 PUL-|脉冲信号输入负 DIR+|电机正、反转控制正 DIR-|电机正、反转控制负 EN+|电机脱机控制正 EN-|电机脱机控制负 A+|连接电机绕组A+相 A-|连接电机绕组A-相 B+|连接电机绕组B+相 B-|连接电机绕组B-相 VCC|电源正极 GND|电源负极 > DC 9-40V 接线有两种方法,一种是共阳极接法: ![image](https://user-images.githubusercontent.com/35989223/53473133-8a3fdf00-3aa4-11e9-980f-04737df49cae.png) 一种是共阴极接法: ![image](https://user-images.githubusercontent.com/35989223/53473280-f3bfed80-3aa4-11e9-8bae-d1964456d715.png) 我采用的是共阴极接法。 单片机我使用的是STM32F103C8T6,就简单的先来个1kHz脉冲,但是接上去,通上电,电机是自锁了,但是在脉冲输入下不转,一点反应都没有,上网一查在知道原来脉冲也要求5V高电平,而改进版的TB6600驱动器就不存在这个问题。 为了验证这个想法,我通上电后手动将PUL+碰上5V电源,果真碰一下转一下,玩的不亦乐乎,是时候展示真正的手速了! 那么,现在就下单买一个光耦继电器...

other

网上冲浪时发现一款将极简主义发挥到极致的记事工具。在这里Mark一下。 # 地址 工具的介绍点这里:[Mak - Inns](https://inns.studio/mak/),使用点这里:[Mak](https://mak.ink/) 没错,打开就是个网站,这个工具只需要一个浏览器就能工作,支持markdown语法,所以还可以用来写博客。支持GitHub账号登录,简直不要太好。 # 实现原理 网站的工作原理很简单,就是使用`localStorage`,可以手动打开DevTool查看localStorage。也正因为这个,所以哪怕网页关闭,电脑关机,只要不卸载浏览器,下次打开这个网页的时候,数据就会在那乖乖等着你。这样做安全性也得到了保障。 从工具的介绍页面来看,该工具还可以很方便地嵌入页面中,非常实用。 # 源代码 目前作者还在整理代码,根据他说的,整理好之后会开源出来。GitHub地址见[这里](https://github.com/inns/mak)。

tools

最近有用户反映[gitblog](https://github.com/imuncle/gitblog)中的用户登录功能非常不稳定,有时能登录,有时不能登录。 看似是个小问题,结果自闭了两天。仔细debug发现是如下代码出了问题: ```javascript var token = getUrlParam('access_token'); if(token != undefined && token != null) { window.localStorage.clear(); window.localStorage.setItem("access_token",token); window.location.href = window.location.origin + window.location.pathname + "?id="+getUrlParam('id'); } ``` `window.localStorage.setItem("access_token",token)`这句话执行需要一定的时间,而JavaScript默认支持异步通信,所以`token`还没有存储进localStorage页面就已经跳转了,导致登录失败。 其实不跳转问题也不是很大,但用户的`access_token`直接显示在浏览器的url中总感觉有些不妥当,所以才进行跳转。 所以其实只要能将url中的`access_token`去掉就行了。 #...

web

时间过得很快,转眼寒假就结束了,又是新的一轮调车。寒假前成功与视觉组对接,接收到了视觉组发送的角度信息。是时候用上它了。 视觉组发送的角度是相对角度,比如现在我的云台在3点钟方向,目标在2点钟方向,视觉传递给电控的数据就是-30°,即让云台向左转动30度。 视觉计算出的角度很大程度上依赖于摄像头的单目测距,但往往总是差一点距离,导致角度不是完全准确,所以我实现辅助瞄准的时候大部分时候都在强行校准角度信息。 # 辅助瞄准基本实现 先说说我是怎么实现辅助瞄准的。 就拿yaw轴来说事,在我的代码中,云台电机位置环PID的反馈值是编码器的值,也就是`real_position`,具体的可以查看我前面写的文章。在正常模式下,云台电机的位置环期望值是由遥控器控制的,在辅助瞄准模式下,这个期望值则由视觉的角度数据确定。实现代码很简单: ```c if(hero.workstate == RemoteControl) //遥控器控制模式 { if(Remote.rc.s1 == 2 && !Is_Error(1

RM

底盘作为一个机器人最基础的东西,是各位必须掌握的。但是看着大家的任务完成进度感到焦心,所以写了这篇步兵车底盘驱动代码的详解,以及底盘调试的步骤和要点。 # 工程简介 - 这篇教程里的代码使用STM32F405RGT6芯片,使用STM32CubeMX软件辅助进行开发。 - 使用的电机是由大疆创新生产的3508无刷电机,搭配C620电子调速器,使用CAN通信进行控制。 - 使用的遥控器是DT7 Robomaster比赛专用遥控器,遥控器接收机为DR16。 - 底盘采用麦克纳姆轮全向底盘,麦克纳姆轮为“O-长方形”型安装方式,四个电机的ID号位置分布如下(底盘正前方朝上): ``` 左上 1 2 右上 左下 4 3 右下 ``` 关于麦克纳姆轮的介绍可以查看这个[视频](https://www.bilibili.com/video/av17229132)的讲解,浅显易懂。 麦克纳姆轮的运动解析计算可以参考这篇博客[【学渣的自我修养】麦克纳姆轮浅谈](https://zhuanlan.zhihu.com/p/20282234),其实麦克纳姆轮底盘就是一个简单的运动合成,可以参考下面的代码进行理解。 # 遥控器通信协议 遥控器采用的是DBUS协议,需要搭配硬件对应的取反电路才能正常使用。单片机通过与接收机的串口通信获取遥控器数据。遥控器每14ms发送一个18字节的数据,在遥控器的说明书中可以看到相关的数据解析函数: ```c Typedef __packed...

RM