05 2018 档案
摘要:MPC是模型预测控制算法,在车辆运动跟踪轨迹的控制中发挥很大的优势 基础的不多说,下面记录我对LQR/MPC/二次规划问题的理解 我们从LQR来引出MPC LQR的能量函数,目的是求函数J最小,即用最小的代价得到最好的控制效果,理论上只要系统是可控的,LQR就能求出较优的解 的解是 u= -K_lq
阅读全文
摘要:新的“A”变成着了这样:Ac = A - KB 基于对象:状态空间形式的系统 能量函数J:也称之为目标函数 Q:半正定矩阵,对角阵(允许对角元素出现0) R:正定矩阵,QR其实就是权重 下面这段话可能会加深对LQR的理解: 当x是一维的,J就变成 我们的目的是使能量函数J最小,那么Qx^2和Ru^2
阅读全文
摘要:这是PID的标准形式包括比例/积分/微分三部分,e为偏差 下面我们分析三个环节的作用,设:当前系统状态A,目标状态B, e=B-A,初始状态e>0 (以下是个人的理解,欢迎读者评论) 1 比例环节P e越大u越大,当A近似B时,e非常小,u也非常小,现实系统的u除了要满足自身系统的需求,还要分担给克
阅读全文
摘要:我们得到的矩阵 A = [0 1 0 0; 30.0503 0 0 2.9156; 0 0 0 1; -0.5117 0 0 -1.0015] B = [0; -2.4614; 0; 0.8455] C = [1 0 0 0; 0 0 1 0] D =0 建模前我们先讨论下,ABCD分别是什么,怎么
阅读全文
摘要:枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能: 这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员: value属性则是自动赋给成员的int常量,默认从1开始计数。 如果
阅读全文
摘要:波形就是信息的载体,时域和频域就像是从不同角度来表示波形,时间的角度是我们目前认为唯一存在的客观表达方式,但通过其他角度如频率为基准来表示波会更便捷; 图2一眼就可以直接看出在时域这个波的所有信息。再说滤波,曾以为滤波就是加限制,比如振幅为5的正弦波,我打算超过4的值置4,小于-4的置-4,可以想象
阅读全文
摘要:Python的class允许定义许多定制方法,可以让我们非常方便地生成特定的类。以下是集中常见的定制方法: 怎么才能打印得好看呢?只需要定义好__str__()方法,返回一个好看的字符串就可以了: __str__() 这样打印出来的实例,不但好看,而且容易看出实例内部重要的数据。 但是细心的朋友会发
阅读全文
摘要:多重继承,继承了不同大类的所有功能,这种设计称之为Mixln,其目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。 如:
阅读全文
摘要:这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: 还记得装饰器(decorator)可以给函数动态加上功能吗?对于类的方法,装饰器一样起作用。Python内置
阅读全文
摘要:正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class: 然后,尝试给实例绑定一个属性: 还可以尝试给实例绑定一个方法: 但是,给一个实例绑定的方法,对另一个实例是不起作用的: 为了给所有实例都绑定方法,可以
阅读全文
摘要:由于Python是动态语言,根据类创建的实例可以任意绑定属性。 给实例绑定属性的方法是通过实例变量,或者通过self变量: 但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有: 当我们定义了一个类属性后,这个属性虽然归类所有,但
阅读全文
摘要:当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: 如果一个变量指向函数或者类,也可以用type()判断: 但是type()函数返回的是什么类型呢?它返回对应的Class类型。
阅读全文
摘要:当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: 当我们需要
阅读全文
摘要:在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Pyt
阅读全文
摘要:类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 仍以Student类为例,在Python中,定义类是通过class关键字: cl
阅读全文
摘要:一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。 现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放: 引入了包以后,只要顶层的包名
阅读全文
摘要:假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去: 这样,我们转换二进制就非常方便了: functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下
阅读全文
摘要:什么函数可以被称为闭包函数呢?主要是满足两点:函数内部定义的函数;引用了外部变量但非全局变量。 python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针) 装饰器函数的外部函数传入我要装饰的函数名字,返回经过修饰后
阅读全文
摘要:当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: 通过对比可以看出,匿名函数lambda x: x * x实际上就是: 关键
阅读全文
摘要:函数作为返回值 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数: 当我们调用lazy_sum()时,返回的并不是求和结果,而是求和函数: 调用函数f时,才真正计算求和的结
阅读全文
摘要:函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。 变量可以指向函数 成功!说明变量f现在已经指向了abs函数本身。直接调用abs()函数和调用变量f()完
阅读全文
摘要:这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象: 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。 可以使用isinstance()判断一个对象是否是Iterator对象:
阅读全文
摘要:通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不
阅读全文
摘要:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)): 生成[1x1, 2x2, 3x3, ...,
阅读全文
摘要:如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。 比如dict就可以迭代: 因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。 默认情况下,dict迭代的是key。如果要迭代val
阅读全文
摘要:列表L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素 也可以从索引1开始,取出2个元素出来: 类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试: 切片操作十分有用。我们先创建一个0-99的数列: 可以通
阅读全文
摘要:绝对值 max()可以接收任意多个参数,并返回最大的那个: 数据类型转换 定义函数: 定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。 如定义一个绝对值函数: def my_abs(x): if x >= 0:
阅读全文
摘要:dictionary 通过键值存储,具有极快的查找速度,但占用空间比list大很多 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: 如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Pytho
阅读全文
摘要:for...in循环 再比如我们想计算1-10的整数之和,可以用一个sum变量做累加: 以上列表内容过多就不方便啦,幸好Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数: range(101)
阅读全文
摘要:可以执行多条语句,靠的是缩进原则,看起来也更板扎(注意冒号) 只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False 关于input() 程序会报错,原因时键入时类型是字符,无法直接和整形对比,需要这样改进: 题外话: 写代码时前面加上: 用UTF-8编码方式能节省空间,好
阅读全文
摘要:list 这就是一个列表: 同样len()函数可以获取长度: 将列表内容拿出来: 列表末尾追加元素: 插入指定位置: 删除列表末尾元素: 要把某个元素替换成别的元素 list元素也可以是另一个list 要注意s只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了: 要拿到'php'可
阅读全文
摘要:历史:Ascll~Unicode~UTF-8 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符: 以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如: 如果知道字符的整数编码,还可以用十六进制这么写str:
阅读全文
摘要:经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测。 我们从mnist数据集的test集中随便找一张图片,用来进行实验。 #coding=utf-8 import caffe im
阅读全文
摘要:如果要把训练好的模型拿来测试新的图片,那必须得要一个deploy.prototxt文件,这个文件实际上和test.prototxt文件差不多,只是头尾不相同而也。deploy文件没有第一层数据输入层,也没有最后的Accuracy层,但最后多了一个Softmax概率层。 这里我们采用代码的方式来自动生
阅读全文
摘要:以下主要是摘抄denny博文的内容,更多内容大家去看原作者吧 一 数据准备 准备训练集和测试集图片的列表清单; 二 导入caffe库,设定文件路径 其中train.txt 和test.txt文件已经有了,其它三个文件,我们需要自己编写。 此处注意:一般caffe程序都是先将图片转换成lmdb文件,但
阅读全文
摘要:如果不进行可视化,只想得到一个最终的训练model, 那么代码非常简单,如下 :
阅读全文
摘要:caffe在训练的时候,需要一些参数设置,我们一般将这些参数设置在一个叫solver.prototxt的文件里面 有一些参数需要计算的,也不是乱设置。 假设我们有50000个训练样本,batch_size为64,即每批次处理64个样本,那么需要迭代50000/64=782次才处理完一次全部的样本。我
阅读全文
摘要:恢复内容开始 看了denny的博客,写下自己觉得简短有用的部分 想用caffe训练数据首先要学会编写配置文件: (即便是用别人训练好的模型也要进行微调的,所以此关不可跨越) 代码就不粘贴了,我只总结文字部分的内容: 1 写好各文件/数据的路径; 2 创建数据层,向上传递图像数据和标签数据; 3 卷积
阅读全文

浙公网安备 33010602011771号