精华内容
下载资源
问答
  • 目标检测---教你利用yolov5训练自己目标检测模型

    万次阅读 多人点赞 2021-08-27 15:29:53
    1项目的克隆必要的环境依赖 1.1项目的克隆 YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。不得不说GitHub的确是全球最大的男性交友网站,里面的人个个都是人才,yolov5发布才一年左右的时间,YOLOv...

    目录

    1项目的克隆和必要的环境依赖

    1.1项目的克隆

    1.2项目代码结构整体介绍

    1.3环境的安装和依赖的安装

    2 数据集和预训练权重的准备

    2.1利用labelimg标注数据和数据的准备

    2.2 获得预训练权重

    3训练自己的模型

    3.1修改数据配置文件

    3.2 修改模型配置文件

    3.3训练自己的模型启用tensorbord查看参数

     3.4启用tensorbord查看参数

    1项目的克隆和必要的环境依赖

    1.1项目的克隆

           YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。不得不说GitHub的确是全球最大的男性交友网站,里面的人个个都是人才,yolov5发布才一年左右的时间,YOLOv5就已经更新了5个分支了,分别是yolov5.1-yolov5.5分支。该项目就是利用的yolov5.5分支来作为讲解。

           首先打开yolov5的github的官网(这个网站在国外打开是很慢的,而且是有的时候能正常打开,有的时候是进不去的,但是大家第一次打不开的话,一定要多打开几次。)打开的官网界面如下,这个就是大神glenn-jocher开源的yolov5的项目。

           这个开源的项目通过大家的不断的完善和修复已经到了第5个分支,因此我们选择第五个版本来实验,首先点击左上角的master这个图标来选择项目的第5个分支,如下图所示,然后将版本选择好以后,点击右上角的code那个按键,将代码下载下来。至此整个项目就已经准备好了。

    1.2项目代码结构整体介绍

           将我们下载好的yolov5的代码解压,然后用一款IDE打开(我用的是pycharm),打开之后整个代码目录如下图:

           现在来对代码的整体目录做一个介绍:

    ├── data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称);还有一些官方提供测试的图片。如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。但是自己的数据集不建议放在这个路径下面,而是建议把数据集放到yolov5项目的同级目录下面。

    ├── models:里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测测度分别都是从快到慢,但是精确度分别是从低到高。这就是所谓的鱼和熊掌不可兼得。如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。

    ├── utils:存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。

    ├── weights:放置训练好的权重参数。

    ├── detect.py:利用训练好的权重参数进行目标检测,可以进行图像、视频和摄像头的检测。

    ├── train.py:训练自己的数据集的函数。

    ├── test.py:测试训练的结果的函数。

    ├──requirements.txt:这是一个文本文件,里面写着使用yolov5项目的环境依赖包的一些版本,可以利用该文本导入相应版本的包。

    以上就是yolov5项目代码的整体介绍。我们训练和测试自己的数据集基本就是利用到如上的代码。

    1.3环境的安装和依赖的安装

            关于深度学习的环境的安装,我已经写了一篇很详细的博客了,值得一提的一点就是,正常需要利用GPU去训练数据集的话,是需要安装对应的CUDA和cudnn的,但是我写的那篇博客是利用anaconda去配置环境,不要再额外的去英伟达的官网下载CUDA。

            博客的链接为利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn(适合小白的保姆级教学)

            打开requirements.txt这个文件,可以看到里面有很多的依赖库和其对应的版本要求。我们打开pycharm的命令终端,在中输入如下的命令,就可以安装了。

    pip install -r requirements.txt

            至此,深度学习的环境和依赖包就都结束了。

    2 数据集和预训练权重的准备

    2.1利用labelimg标注数据和数据的准备

           这里有很完备教程,教你使用labelimg,给自己的数据集来打上标签。利用labelimg制作自己的深度学习目标检测数据集

            还有很完备的代码将labelimg标注好的voc格式或者yolo格式相互转换。labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

           还有完备的代码可以将格式转换好的数据集划分为训练集和验证集来训练我们自己的yolov5模型。目标检测算法---将数据集为划分训练集和验证集

            数据最好放在最外一级目录中,然后数据集的目录格式如下图所示。大家一定要严格按我的格式来,否则非常容易出问题。

    2.2 获得预训练权重

           一般为了缩短网络的训练时间,并达到更好的精度,我们一般加载预训练权重进行网络的训练。而yolov55.0版本给我们提供了几个预训练权重,我们可以对应我们不同的需求选择不同的版本的预训练权重。通过如下的图可以获得权重的名字和大小信息,可以预料的到,预训练权重越大,训练出来的精度就会相对来说越高,但是其检测的速度就会越慢。预训练权重可以通过这个网址进行下载,本次训练自己的数据集用的预训练权重为yolov5s.pt

    3训练自己的模型

    3.1修改数据配置文件

             预训练模型和数据集都准备好了,就可以开始训练自己的yolov5目标检测模型了,训练目标检测模型需要修改两个yaml文件中的参数。一个是data目录下的相应的yaml文件,一个是model目录文件下的相应的yaml文件。

           修改data目录下的相应的yaml文件。找到目录下的voc.yaml文件,将该文件复制一份,将复制的文件重命名,最好和项目相关,这样方便后面操作。我这里修改为hat.yaml。该项目是对安全帽的识别。

           打开这个文件夹修改其中的参数,首先将箭头1中的那一行代码注释掉(我已经注释掉了),如果不注释这行代码训练的时候会报错;箭头2中需要将训练和测试的数据集的路径填上(最好要填绝对路径,有时候由目录结构的问题会莫名奇妙的报错);箭头3中需要检测的类别数,我这里是识别安全帽和人,所以这里填写2;最后箭头4中填写需要识别的类别的名字(必须是英文,否则会乱码识别不出来)。到这里和data目录下的yaml文件就修改好了。

    3.2 修改模型配置文件

           由于该项目使用的是yolov5s.pt这个预训练权重,所以要使用models目录下的yolov5s.yaml文件中的相应参数(因为不同的预训练权重对应着不同的网络层数,所以用错预训练权重会报错)。同上修改data目录下的yaml文件一样,我们最好将yolov5s.yaml文件复制一份,然后将其重命名,我将其重命名为yolov5_hat.yaml。

            打开yolov5_hat.yaml文件只需要修改如图中的数字就好了,这里是识别两个类别。

           至此,相应的配置参数就修改好了。

    3.3训练自己的模型启用tensorbord查看参数

           如果上面的数据集和两个yaml文件的参数都修改好了的话,就可以开始yolov5的训练了。首先我们找到train.py这个py文件。

             然后找到主函数的入口,这里面有模型的主要参数。模型的主要参数解析如下所示。

    if __name__ == '__main__':
    """
        opt模型主要参数解析:
        --weights:初始化的权重文件的路径地址
        --cfg:模型yaml文件的路径地址
        --data:数据yaml文件的路径地址
        --hyp:超参数文件路径地址
        --epochs:训练轮次
        --batch-size:喂入批次文件的多少
        --img-size:输入图片尺寸
        --rect:是否采用矩形训练,默认False
        --resume:接着打断训练上次的结果接着训练
        --nosave:不保存模型,默认False
        --notest:不进行test,默认False
        --noautoanchor:不自动调整anchor,默认False
        --evolve:是否进行超参数进化,默认False
        --bucket:谷歌云盘bucket,一般不会用到
        --cache-images:是否提前缓存图片到内存,以加快训练速度,默认False
        --image-weights:使用加权图像选择进行训练
        --device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)
        --multi-scale:是否进行多尺度训练,默认False
        --single-cls:数据集是否只有一个类别,默认False
        --adam:是否使用adam优化器
        --sync-bn:是否使用跨卡同步BN,在DDP模式使用
        --local_rank:DDP参数,请勿修改
        --workers:最大工作核心数
        --project:训练模型的保存位置
        --name:模型保存的目录名称
        --exist-ok:模型目录是否存在,不存在就创建
    """
        parser = argparse.ArgumentParser()
        parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
        parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
        parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')
        parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
        parser.add_argument('--epochs', type=int, default=300)
        parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
        parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
        parser.add_argument('--rect', action='store_true', help='rectangular training')
        parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
        parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
        parser.add_argument('--notest', action='store_true', help='only test final epoch')
        parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
        parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
        parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
        parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
        parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
        parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
        parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
        parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
        parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
        parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
        parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
        parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
        parser.add_argument('--project', default='runs/train', help='save to project/name')
        parser.add_argument('--entity', default=None, help='W&B entity')
        parser.add_argument('--name', default='exp', help='save to project/name')
        parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
        parser.add_argument('--quad', action='store_true', help='quad dataloader')
        parser.add_argument('--linear-lr', action='store_true', help='linear LR')
        parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
        parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
        parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
        parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
        parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
        opt = parser.parse_args()

             训练自己的模型需要修改如下几个参数就可以训练了。首先将weights权重的路径填写到对应的参数里面,然后将修好好的models模型的yolov5s.yaml文件路径填写到相应的参数里面,最后将data数据的hat.yaml文件路径填写到相对于的参数里面。这几个参数就必须要修改的参数。

        parser.add_argument('--weights', type=str, default='weights/yolov5s.pt', help='initial weights path')
        parser.add_argument('--cfg', type=str, default='models/yolov5s_hat.yaml', help='model.yaml path')
        parser.add_argument('--data', type=str, default='data/hat.yaml', help='data.yaml path')

             还有几个需要根据自己的需求来更改的参数:

            首先是模型的训练轮次,这里是训练的300轮。

    parser.add_argument('--epochs', type=int, default=300)

             其次是输入图片的数量和工作的核心数,这里每个人的电脑都不一样,所以这里每个人和自己的电脑的性能来。这里可以根据我的电脑的配置做参考,我的电脑是拯救者R9000,3060版本的显卡,cpu的核心数是8核。我的电脑按默认的参数输入图片数量为16,工作核心为8的话就会出现GPU显存溢出的报错。报错信息如下:

             这里就要调小这两个参数了,每个人的电脑配置不一样,所以可以根据自己的电脑配置来修改参数。

    parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs')
    parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')

           以上都设置好了就可以训练了。但是pycharm的用户可能会出现如下的报错。这是说明虚拟内存不够了。         可以根据如下的操作来修改,在utils路径下找到datasets.py这个文件,将里面的第81行里面的参数nw改完0就可以了。

            至此,就可以运行train.py函数训练自己的模型了。 

     3.4启用tensorbord查看参数

             yolov5里面有写好的tensorbord函数,可以运行命令就可以调用tensorbord,然后查看tensorbord了。首先打开pycharm的命令控制终端,输入如下命令,就会出现一个网址地址,将那行网址复制下来到浏览器打开就可以看到训练的过程了

    tensorboard --logdir=runs/train

            如下图所示,这是已经训练了100轮了。

            如果模型已经训练好了,但是我们还想用tensorbord查看此模型的训练过程,就需要输入如下的命令。就可以看到模型的训练结果了。

    tensorboard --logdir=runs
    

    4 推理测试

            等到数据训练好了以后,就会在主目录下产生一个run文件夹,在run/train/exp/weights目录下会产生两个权重文件,一个是最后一轮的权重文件,一个是最好的权重文件,一会我们就要利用这个最好的权重文件来做推理测试。除此以外还会产生一些验证文件的图片等一些文件。

             找到主目录下的detect.py文件,打开该文件。

            然后找到主函数的入口,这里面有模型的主要参数。模型的主要参数解析如下所示。 

    f __name__ == '__main__':
    """
    --weights:权重的路径地址
    --source:测试数据,可以是图片/视频路径,也可以是'0'(电脑自带摄像头),也可以是rtsp等视频流
    --output:网络预测之后的图片/视频的保存路径
    --img-size:网络输入图片大小
    --conf-thres:置信度阈值
    --iou-thres:做nms的iou阈值
    --device:是用GPU还是CPU做推理
    --view-img:是否展示预测之后的图片/视频,默认False
    --save-txt:是否将预测的框坐标以txt文件形式保存,默认False
    --classes:设置只保留某一部分类别,形如0或者0 2 3
    --agnostic-nms:进行nms是否也去除不同类别之间的框,默认False
    --augment:推理的时候进行多尺度,翻转等操作(TTA)推理
    --update:如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
    --project:推理的结果保存在runs/detect目录下
    --name:结果保存的文件夹名称
    
    """
        parser = argparse.ArgumentParser()
        parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
        parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for webcam
        parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
        parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
        parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')
        parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
        parser.add_argument('--view-img', action='store_true', help='display results')
        parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
        parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
        parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
        parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
        parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
        parser.add_argument('--augment', action='store_true', help='augmented inference')
        parser.add_argument('--update', action='store_true', help='update all models')
        parser.add_argument('--project', default='runs/detect', help='save results to project/name')
        parser.add_argument('--name', default='exp', help='save results to project/name')
        parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
        opt = parser.parse_args()

             这里需要将刚刚训练好的最好的权重传入到推理函数中去。然后就可以对图像视频进行推理了。

    parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp/weights/best.pt', help='model.pt path(s)')

            对图片进行测试推理,将如下参数修改成图片的路径,然后运行detect.py就可以进行测试了。

     parser.add_argument('--source', type=str, default='000295.jpg', help='source') 

            推理测试结束以后,在run下面会生成一个detect目录,推理结果会保存在exp目录下。如图所示。

             图片的推理结果如下所示。效果还是很不错的。

            对视频进行测试,和如上的图片的测试是一样的,只不过是将图片的路径改为视频的路径而已。利用摄像头进行测试只需将路径改写为0就好了。但是好像还是会报错,这一点卡了我很久。报错如下。

             解决方法:首先找到datasets.py这个py文件。

            打开文件,找到第279行代码,给两个url参数加上str就可以了,如图所示,就可以完美运行电脑的摄像头了。 

            至此yolov5训练自己的模型就完全搞定了。

    展开全文
  • 对目标进行标注的时候有没有什么规范呀?比如框的尺寸什么的。。应该不是把物体直接框起来就完事了吧~是不是应该有点什么说法呀?![图片说明](https://img-ask.csdn.net/upload/201810/29/1540780726_301891.png)
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    普通用户只能修改自己的Shell,超级用户可以修改全体用户的Shell。要想查询系统提供哪些Shell,可以使用chsh -l 命令,见图1所示。 图1 系统可以使用的Shell类型 从图1中可以看到,笔者系统中可以使用的Shell有...
  • 1.C语言创建程序 1.1C语言创建(分为4个步骤) 编辑 ...编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。 (该部分编译是指汇编器编译汇编语言或者编译器编译...

    转自:https://www.jianshu.com/p/7c609b70acbd

    1.C语言创建程序

    1.1C语言创建(分为4个步骤)
    • 编辑
    • 编译
    • 链接
    • 执行

    编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。
    编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。
    (该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)
    链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。
    执行:运行程序。

    C.png
    1.2什么是源代码,目标文件,可执行文件。

    源代码 ——源文件就是存放程序代码的文件。通常我们编辑代码的文件就是源文件。

    • 源代码相对目标代码和可执行代码而言的。
    • 源代码就是用汇编语言和高级语言写出来的地代码。

    目标文件——指源代码经过编译程序产生的能被cpu直接识别二进制代码。

    • 目标代码指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。
    • 目标文件包括着机器代码(可直接被计算机中央处理器履行)和代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),另外还包括其他调试信息。
    gcc -c main.c 
    编译main.c ,生成目标文件main.o,但不进行link. 
    gcc -o main.o
    链接成可执行文件main

    可执行文件——可执行代码就是将目标代码连接后形成的可执行文件,当然也是二进制的。 连接程序系统库文件连接就生成可执行文件。

    例如:*.obj是程序编译之后生成的目标文件,连接程序再将这个文件与系统库文件连接就生成可执行文件
    
    1.3链接器的作用
    Screen Shot 2017-06-12 at 4.32.06 PM.png

    根据上面的图,我们可以看到链接器还额外链接了2个部分。

    目标代码文件中所缺少的第一个元素是一种叫做启动代码(Start-up code)的东西,此代码相当于您的程序和操作系统之间的接口。例如你可以在dos 或Linux下运行一个 IBM PC 兼容机,在两种情况中硬件是相同的,所以都会使用同样的目标代码,但是 DOS与Linux要使用不用的启动代码,因为这两种系统处理程序的方式不同的。

    所缺少的第二个元素是库例程的代码。几乎所有C程序都利用标准库中所包含的例程(称为函数)。例如,程序中的函数printf()。目标代码文件不包含这一函数的指令。实际代码存储在另一个称为“库”的文件中,库文件中包含许多函数的目标代码。

    链接器的作用是将这3个元素(目标代码、系统的标准启动代码和库代码)结合在一起,并将他们存放在单个文件,即可执行文件中。对库代码来说,链接器只从库中提取您所使用的函数所需的代码。

    可以得出结论:目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含您所编写的代码转换成的机器语言,而可执行文件还包含您所使用的库例程以及启动代码。

    下面这幅图能大致说明一下链接的情况。


    1.png

    这是一个main.o目标代码,内部有main,foo,bar三个函数。

    U main表示main这个符号在crtl1.o中用到了,但是没有定义。因此需要main.o提供定义并和crtl1.o链接在一起。main整个程序的入口实际上是_crtl1.o中的 _start,它做了一些初始化工作(启动历程),然后调用C代码中提供的main.c函数。libc是运行时候动态链接libc共享库(库中包含常用的函数)。

    所以程序的入口点其实是_start,main函数实际上是被_start调用。

    1.4gcc命令图
    QQ截图20170613151139.png

    2.ELF文件(该部分分析目标文件和可执行文件的,涉及部分汇编指令)

    ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型:

    • 可重定位的目标文件
    • 可执行文件
    • 共享库

    ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section HeaderTable描述的一系列Section的集合,而执行一个ELF文件时,在加载器(Loader)看来它是 由Program Header Table描述的一系列Segment的集合。如下图所示。


    Screen Shot 2017-06-10 at 10.01.54 PM.png

    左边是从汇编器和链接器的视角来看这个文件,开头的ELF Header描述了体系结构和操作系统 等基本信息,并指出Section Header Table和Program Header Table在文件中的什么位 置,Program Header Table在汇编和链接过程中没有用到,所以是可有可无的,Section Header Table中保存了所有Section的描述信息。右边是从加载器的视角来看这个文件,开头 是ELF Header,Program Header Table中保存了所有Segment的描述信息,Section Header Table在加载过程中没有用到,所以是可有可无的。注意Section Header Table和ProgramHeader Table并不是一定要位于文件开头和结尾的,其位置由ELF Header指出,上图这么画只是为了清晰。

    目标文件需要链接器做进一步处理,所以一定有Section Header Table;可执行文件需要加载运行,所以一定有Program Header Table;而共享库既要加载运行,又要在加载时做动态链接, 所以既有Section Header Table又有Program Header Table。

    • section:C语言内存中的.text,.data,.bss.....
    • Segment:是指在程序运行时加载到内存的具有相同属性的区域,由一个或多个Section组成,比如有两个Section都要求加载到内存后可读可写,就属于同一个Segment。有些Section只对汇编器和链接器有意义,在运行时用不到,也不需要加载到内 存,那么就不属于任何Segment 。

    2.1重定位目标文件

    在进行该部分之前,我们先查看一下网上的部分重定位目标文件的资料。

    资料一:

    汇编器所产生的目标文件至少包括三个区,即文本区(text),数据区(data)和bss区。文本区一般包括程序的代码和常量,数据区通常存放全局变量等内容,bss区用于存放未初始化的变量或作为公共变量存储空间。在一个目标文件中,其text区从地址0开始,随后是data区,再后面是bss区。而要运行程序,必须装载到内存中,所以这些区的地址需要在内存中重新安排,也就是重定位。

    资料二:

    编译器编译后产生的目标文件是可重定位的程序模块,并不能直接运行,链接就是把目标文件和其他分别进行编译生成的程序模块(如果有的话)及系统提供的标准库函数连接在一起,生成可运行的可执行文件的过程。
    重定位是链接器在完成符号解析后(知道了各个输入模块的代码段和数据段的大小)的一个步骤,其作用顾名思义就是重新定位,确定比如指令,全局变量等在运行时的存储器地址。

    资料三:

    比如说两个编译后的可重定位目标文件obj1.o和obj2.o
    在obj1.o里面定义了一个全局变量glob(在obj1里面记录了glob相对于该文件数据段的相对地址), 而obj2.0里面又引用了这个全局变量glob。
    链接的重定位就是要确定在链接后的可执行程序中glob的地址,而不是相对于obj1的地址,从而使obj2也能通过地址调用glob。
    当然重定位并不只是全局变量,还包括外部函数,指令等运行时地址的确定

    资料四:

    当你在程序中写上一个全局变量或者是一个函数时,这个定位过程会经历几个阶段:
    1.在这个目标文件中的相对定位,一个目标文件中对此文件中的所有函数,变量进行符号描述,比如一个变量A,它所占的相对地址是多少?是全局的?或者是静态的,或者是外部的??
    2.在连接多个目标成一个可执行文件时,会再次对这个变量进行重定位,也就是在这个可执行文件中进行对此变量进行描述,同目标文件中的描述差不多,只不过此变量不再有外部,内部之分,都成了本地变量,并且会将所有全局变量存放在一定的逻辑地址中,这是通过连接脚本文件与各个目标文件中的相对地址共同决定的
    3.最终的操作系统加载这个可执行文件时,会对这些变量与函数地址再次进行重定位,其方式就是首先分析这个可执行文件中的不同段,读出相应的描述表,然后通过逻辑地址与物理地址进行映射出,最终就将可执行的二进制码加进了真实的物理内存了,关于分析可执行文件格式与物理地址的转换,不同的CPU与操作系统的实现方式会有不同之处

    接下来我们开始实践部分,首先写一个求一组数的最大值的汇编程序max.s。

    Screen Shot 2017-06-11 at 3.42.29 PM.png

    现在有一个max.o目标文件,我们用readlf工具读取其ELF Header和Section Header Table


    Screen Shot 2017-06-10 at 10.20.59 PM.png

    ELF Header中描述了操作系统是UNIX,体系结构是80386。Section Header Table中有8个Section Header,从文件地址200
    (0xc8)开始,每个Section Header占40字节,共320字节,到文件地址0x207结束。这个目标文件没有Program Header。文件地址是这样定义的:文件开头第一个字节的地址是0,然后每个字节占一个地址。

    QQ图片20170611130217.png

    从Section Header中读出各Section的描述信息。
    Addr是这些段加载到内存中的地址(程序中的地址都是虚拟地址),加载地址要在链接时填写,现在空缺,所以是全0。
    OffSize两列指出了各Section的文件地址,比如.data段从文件地址0x60开始,一共0x38个字节,回去翻一下程序,.data段定义了14个4字节的整数,一共是56个字节,也就是0x38。

    根据以上信息可以描绘出整个目标文件的布局。

    QQ图片20170611132839.png

    ** Section Header Table**:读出各Section的描述信息。
    .shstrtab:保存着各Section的名字,比如.text,.data.....。
    .strtab:保存着程序中用到的符号的名字.比如汇编程序的start_loop:和loop_exit符号。(对应的就是for循环)。
    **.data **:保存程序中已初始化的全局变量和静态变量以及字符串常量。
    .bss:存放程序中未初始化的全局变量和静态变量。
    .text:存放程序执行代码。
    .rel.text:告诉链接器指令中的哪些地方需要做重定位。
    下节分析。

    Screen Shot 2017-06-11 at 2.40.30 PM.png

    我们看一下.text段内容


    Screen Shot 2017-06-11 at 3.44.53 PM.png

    ![Uploading QQ截图20170613113520_952796.png . . .]

    text段代码中,一些跳转指令和内存访问指令中的地址都是符号的相对地址,下一步链接器要修改这些指令,把其中的地址都改成加载时的内存地址,这些指令才能正确执行。

    2.2可执行文件

    现在分析可执行文件max。


    Screen Shot 2017-06-11 at 2.45.59 PM.png
    Screen Shot 2017-06-11 at 2.47.07 PM.png
    Screen Shot 2017-06-11 at 2.47.43 PM.png
    Screen Shot 2017-06-11 at 2.48.05 PM.png

    在ELF Header中,Type改成了EXEC,由目标文件变成可执行文件了多了两个Program Header,少了两个Section Header。

    在Section Header Table中,.text和.data的加载地址分别改成了0x0804 8074和0x0804 90a0。.bss段没有用到,所以被删掉了。.rel.text段就是用于链接过程的,链接完了就没用 了,所以也删掉了。

    多出来的Program Header Table描述了两个Segment的信息。.text段和前面的ELF Header、Program Header Table一起组成一个Segment(FileSiz指出总长度 是0x9e),.data段组成另一个Segment(总长度是0x38)。VirtAddr列指出第一 个Segment加载到虚拟地址0x0804 8000,第二个Segment加载到地址0x0804 90a0。Flg列指出第一个Segment的访问权限是可读 可执行,第二个Segment的访问权限是可读可写。

    Screen Shot 2017-06-11 at 2.54.13 PM.png

    原来目标文件符号表中的Value都是相对地址,现在都改成绝对地址了。

    我们查看一下.txt段内容。


    Screen Shot 2017-06-11 at 3.32.25 PM.png
    现在我们对比一下目标文件和可执行文件的不同。

    目标文件.text和.data段地址


    QQ截图20170613113520.png

    可执行文件.text和.data段地址


    QQ截图20170613113500.png

    目标文件中跳转指令


    Screen Shot 2017-06-11 at 3.35.56 PM.png

    可执行文件中跳转指令


    Screen Shot 2017-06-11 at 3.36.18 PM.png

    目标文件中内存访问指令


    Screen Shot 2017-06-11 at 3.37.08 PM.png

    可执行文件中内存访问指令


    • 可以看到指令中的相对地址都改成绝对地址了。
    • 结合上2部分分析,我们可以看到。
    • .text和.data段代码加载到内存中的地址由空缺0变成了具体地址。
    • .text段代码中一些跳转指令和内存访问指令中的地址由相对地址改成加载时的内存地址,
    • .data段代码也由相对地址改为绝对地址。

    3.静态库和共享库

    :有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf)。

    共享库和静态库的区别:在链接libc共享库时只是指定了动态链接器和该程序所需要的库文件,并没有真的做链接,可执行文件调用的libc库函数仍然是未定义符号,要在运行时做动态链接。而在链接静态库时,链接器会把静态库中的目标文件取出来和可执行文件真正链接在一起。

    • 静态库链接后,指令由相对地址变为绝对地址,各段的加载地址定死了。
    • 共享库链接后,指令仍是相对地址,共享库各段的加载地址并没有定死,可以加载到任意位置。

    静态库好处:静态库中存在很多部分,链接器可以从静态库中只取出需要的部分来做链接 (比如main.c需要stach.c其中的一个函数,而stach.c中有4个函数,则打包库后,只会链接用到那个函数)。另一个好处就是使用静态库只需写一个库文件名,而不需要写一长串目标文件名。

    该部分是参照《一站式学习C编程》所做的总结,理解程度比较初步。

    展开全文
  • 如何制定人生目标和实现目标

    千次阅读 2017-01-11 22:54:56
    如何制定人生目标和实现目标 第一步:分析你的需求。你也许会问:这一步怎么做呢?不妨试试以下方法。开动脑筋,写下来10条未来5年你认为自己应做的事情,要确切,但不要有限制和顾虑那些是自己做不到的,给自己...

    如何制定人生目标和实现目标

    第一步:分析你的需求。你也许会问:这一步怎么做呢?不妨试试以下方法。开动脑筋,写下来10条未来5年你认为自己应做的事情,要确切,但不要有限制和顾虑那些是自己做不到的,给自己头脑充分空间。

    第二步:SWOT分析。分析完你的需求,试着分析自己性格、所处环境的优势和劣势。以及一生中可能会有哪些机遇;职业生涯中可能有哪些威胁?这是要求你试着去理解并回答自己这个问题:我在哪儿?

    第三步:长期和短期的目标。根据你认定的需求,自己的优势、劣势、可能的机遇来勾画自己长期和短期的目标。例如,如果你分析自己的需求是想授课,赚很多钱,有很好的社会地位,则你可选的职业道路会明晰起来。你可以选择成为管理讲师--这要求你的优势包括丰富的管理知识和经验,优秀的演讲技能和交流沟通技能。在这个长期目标的基础上,你可制定自己短期目标来一步步实现。

    第四步:阻碍。确切地说,写下阻碍你达到目标的自己的缺点,所处环境中劣势。这些缺点一定是和你的目标有联系的,而并不是分析自己所有的缺点。他们可能是你的素质方面、知识方面、能力方面、创造力方面、财力方面或是行为习惯方面的不足。当你发现自己不足的时刻,就下决心改正它,这能使你不断进步。

    第五步:提升计划。要明确,要有期限。你可能会需要掌握某些新的技能,提高某些技能,或学习新的知识。

    第六步:寻求帮助。有外力的协助和监督会帮你更有效地完成这一步骤。

    第七步:分析自己的角色。制定一个明确的实施计划:一定要明确根据计划你要做什么。那么现在你已经有了一个初步的职业规划方案。如果你目前已在一个单位工作,对你来说进一步的提升非常重要,你要做的则是进行角色分析。反思一下这个单位对你的要求和期望是什么。做出哪种贡献可以使你在单位中脱颖而出?大部分人在长期的工作中趋于麻木,对自己的角色并不清晰。但是,就像任何产品在市场中要有其特色的定位和卖点一样,你也要做些事情,一些相关的、有意义和影响但又不落俗套的事情,让这个单位知道你的存在,认可你的价值和成绩。成功的人士会不断对照单位的投入来评估自己的产出价值,并保持自己的贡献在单位的要求之上。什么是职业生涯? (我兄弟写的帮助过我)

    职业生涯是一个人一生中所有与职业相联系的行为与活动,以及相关的态度、价值观、愿望等的连续性经历的过程,也是一个人一生中职业、职位的变迁及工作理想的实现过程。

    简单说,职业生涯就是一个人终生的工作经历。一般可以认为,我们的职业生涯开始于任职前的职业学习和培训,终止于退休。我们选择什么职业作为我们的工作,这对于我们每个人的重要性都是不言而喻的。

    首先,我们未来的衣食住用行等各种需要,包括许多年轻人梦想的出国旅游、买楼、买车,几乎都要通过我们的工作来满足;

    同时,现代人大部分时间是在社会组织中度过的。在毕业后到退休前的几十年中,我们几乎每天都要和我们的工作打交道,因此,我们从事的工作,我们自己是否喜欢,是否适合,是否觉得这份工作很有意义,对我们同样非常重要。一位总裁曾经说过:“在我看来,世界上最大的悲剧莫过于,有太多年轻人从来没有发现自己真正想做什么。想想看,一个人在工作中只能赚到薪水,其他的一无所获,这是一件多么可悲的事情啊!”

    所以,我们在选择职业的时候,应该慎重的对待。中国的古话“男怕入错行,女怕嫁错郎”,在一定程度上反映了职业对于我们每个人的重要性。

    为什么要对我们的职业生涯进行规划?在这里首先和大家分享一个小故事,希望对大家认识“职业生涯规划”的重要性有所启发:蚯蚓的目标阶梯

    蚯蚓是我从小到大的朋友。蚯蚓不是原名,由于他长得黑矮瘦弱,因而得名。

    18岁分开后,我在外为生活四处漂泊奔波;蚯蚓却上了大学,什么事都挺顺当。在这分开的十年里,我们几乎每隔两三年见一次面。每一次我都喜欢问他同一个问题:你将来的目标是什么?

    得到的答案总是不相同。下面记录的是蚯蚓每次谈及目标的原话:18岁,高中毕业典礼上:我发誓要当李嘉诚第二!我要当中国首富(好大的口气)!

    20岁,春节老同学团聚会上:我想创立自己的公司,30岁时拥有资产2000万。

    23岁,在某工厂当技术员,第二职业是炒股:我正在为离开这家工厂而奋斗,因为在这里工作太没前途了。我将全力炒股,三年内用5万炒到300万元(似乎有点实现的可能)。

    25岁,炒股失意而情场得意,开始准备结婚:我希望一年后能有10万元,让我风风光光地结婚(挺现实的想法)。

    26岁,不太风光的结婚典礼上:我想生一个胖小子,不久的将来当个车间主任就行,别的不想了(是不是结婚就会使人成熟)。

    28岁,所在的工厂效益下滑,偏偏正是妻子怀胎十月的时候:我希望这次下岗名单里千万不要有我的名字(这时候我还能说什么)。

    从上面的小故事可以看出,蚯蚓显然没有对自己的人生进行合理的规划,刚开始的时候当技术员,但他没有去细心研究技术,而是去炒股,想赚到300万,后来炒股失败忽而又想当车间主任,最后可能技术也不是很精通,担心下岗名单中不要有他的名字。他这样一个没有规划的人生,显然是很容易失败的。

    实际上我们要想在未来职业生涯中获得成功,首先应该确定一个切合实际的职业定位和职业目标,并且把目标进行分解,然后设计出合理的职业生涯规划图,并且付诸行动,经过不断努力和调整,直到最后实现我们的职业发展目标,获得人生的最大成功。

    我们要想我们的职业生涯能获得很大成功,首先我们应该明白成功的一般规律。美国的成功学大师安东尼·罗宾斯曾经提出过一个成功的万能公式:成功=明确目标+详细计划+马上行动+检查修正+坚持到底。从这个公式我们可以看出,我们要想成功,一般我们要首先明白我们的目标和详细的计划。我们在职业生涯领域也是同样。我们首先选择一个最适合我们发展的行业和工作,然后确定我们的目标,同时对我们的整个职业生涯进行初步规划,最后付诸行动,并且经常的对自己的目标和计划进行检查修正,最后坚持到底,定能获得职业生涯的成功。

    职业生涯规划对我们获得职业成功的重要意义

    职业生涯规划是针对决定个人职业选择的主观和客观因素进行分析和测定,确定个人的奋斗目标和职业目标,并对自己的职业生涯进行合理规划的过程。

    职业生涯规划要求你根据自身的“职业兴趣、性格特点,能力倾向,以及自身所学的专业知识技能等”自身因素,同时考虑到各种外界因素,经过综合权衡考虑,来把自己定位在一个最能发挥自己长处的位置,以便最大限度地实现自我价值。一个职业目标与生活目标相一致的人是幸福的,职业生涯规划实质上是追求最佳职业生涯的过程。

    哈佛大学的爱德华·班菲德博士对美国社会进步动力的研究发现,那些成功的人往往都是有长期时间观念的人。他们在做每天、每周、每月活动规划时,都会用长期的观点去考量。他们会规划五年、十年,甚至二十年的未来计划。他们分配资源或做决策都是基于他们预期自己在几年后的地位而定。这一研究成果,对于刚刚跨入社会的职场人士有着重要的启示作用。例如我们共同分析一个案例:

    在沈阳市的一次大型招聘会上,毕业于某名牌高校的小何向浙江一家汽车公司申请一个机械工程师的岗位。他学的是机械专业,在大学期间各门功课都优秀,毕业后的五六年时间里,从事过医药、空调、摩托车等产品的销售、品质主管,换了六七个工作,但是没有机械方面的工作经历。招聘者看了他的情况后认为,如果他毕业后稳定从事过机械方面工作,则正是公司需要的人选,但是因为没有这方面的工作经验,公司却无法录用他。

    小何的例子表明了很多大学生盲目就业,给自己所带来的危害。由于没有长远打算,很多大学生年轻时只是随波逐流地换工作,到了30多岁还没有职业定位。这种情况之下,继续下去出路不大,重新定位又要费很大力气,不得不陷入一种尴尬的境地。

    持久性改变是人生力量的积累,这需要一种"长期的时间观念"。以销售为例,你销售生涯的涵义是,一般情况下,你必须愿意投人三五年以上的时间,才能蜕变成一个真正的销售精英。这种长期的承诺将完全改变你对训练、日常工作、客户、自己、社区,以及其他工作的态度。日本寿险的推销之神原一平,刚开始做业务的时候,前七个月也没有推销出一张保单,而不得不每天饿肚子,晚上在公园里面睡长椅。

    优秀的人对于他们自己以及生活,一般都会有长远规划。对职业生涯的长期眼光,是我们未来的事业能够登峰造极的重要条件。

    成功是要付出代价的。你必须先辛勤工作好几年,才能达到你赚钱能力的极限,并让你享受渴望的生活方式。一定要先付出代价,持续不断努力好几年以后,才能达成真正有价值的目标。不管想在哪一行出人头地,你起码要投入五年的时间来做准备。不管做的是哪一行,你若想出类拔萃,就一定要有全身心投入至少三五年的心理准备。你要花很长的时间才能培养出足够的专业能力,在竞争激烈的市场中走向成功。否则,如果我们经常的更换城市,更换我们从事的行业和从事的具体工作,那么随着我们变换工作,我们平时积累的相关的知识、技能、工作经验和圈内的人际关系,到时可能都将用不上,最终可能会像我们上面提到的那位小何一样,毕业许多年了,还没有真正的找到适合自己的职业,也没有真正建立起自己独特竞争优势,而陷入一种在现有工作上继续下去出路不大,重新定位又要费很大力气的尴尬。

    成功的职业生涯,从制定合适的目标开始引言:目标就是力量,奋斗才会成功

    研究一些成功者的成功轨迹,就会发现他们走向成功之前大都有着自己的明确目标。美国成功学家拿破仑·希尔在《一年致富》中有这样一句名言:一切成就的起点是渴望。一个人追求的目标愈高,他的才能发展就愈快。一心向着自己目标前进的人,整个世界都给他让路。希尔认为,所有成功,都必须先确立一个明确的目标,当对目标的追求变成一种执著时,你就会发现所有的行动都会带领你朝着这个目标迈进。目标就是力量,奋斗才会成功。古今中外凡在智能上有所发展、事业上有所成就的人,无不有着明确而坚定的目标。英国前首相本杰明·迪斯累里原本是一名并不成功的作家,出版数部作品却无一能给人留下深刻印象。后来迪斯累里涉足政坛,决心成为英国首相。他克服重重阻力,先后当选议员、下议院主席、高等法院首席法官,直至1868年实现既定目标成为英国首相。对于自己的成功,在一次简短的演说中迪斯累里一言以蔽之:“成功的秘诀在于坚持目标。”明确而坚定的目标是赢得成功、有所作为的基本前提,因为坚定目标的意义,不仅在于面对种种挫折与困难时能百折不挠,抓住成功的契机,让梦想一步步变为现实,更重要的还在于身处逆境能产生巨大的奋进激情,使自己的潜能得到最大发掘与释放。

    故事一:目标对人生影响的跟踪调查哈佛大学有一个非常著名的关于目标对人生影响的跟踪调查。调查的对象是一群智力、学历、环境等条件都差不多的大学毕业生。结果是这样的:

    27%的人,没有目标;60%的人,目标模糊;10%的人,有清晰但比较短期的目标;3%的人,有清晰而长远的目标。以后的25年,他们开始了自己的职业生涯。

    25年后,哈佛再次对这群学生进行了跟踪调查。结果是这样的:3%的人,25年间他们朝着一个方向不懈努力,几乎都成为社会各界的成功人士,其中不乏行业领袖、社会精英;

    10%的人,他们的短期目标不断的实现,成为各个领域中的专业人士,大都生活在社会的中上层;

    60%的人,他们安稳的生活与工作,但都没有什么特别的成绩,几乎都生活在社会的中下层;

    剩下27%的人,他们的生活没有目标,过得很不如意,并且常常抱怨他人,抱怨社会、抱怨这个“不肯给他们机会”的世界。

    其实,他们之间的差别仅仅在于:25年前,他们中的一些人知道自己到底要什么,而另一些人则不清楚或不很清楚。故事二:新生活是从选定方向开始的

    还有一个故事,同样说明了清晰的目标和方向,对我们人生成功的重要意义:

    比塞尔是西撒哈拉沙漠中的一个小村庄,它靠在一块1.5平方公里的绿洲旁,可是在肯·莱文 1926年发现它之前,这儿的人没有一个走出过大沙漠。肯·莱文作为英国皇家学院的院士,当然不相信这种说法。他用手语向这儿的人问其原因,结果每个人的回答都是一样:从这儿无论向哪个方向走,最后都还是要转到这个地方来。为了证实这种说法的真伪,他做了一次实验,从比塞尔向北走,结果三天半就走了出来。

    比塞尔人为什么走不出来呢?肯·莱文非常纳闷,最后他只得雇一个比塞尔人,让他带路,看看到底如何?他们带了半个月的水,牵上两匹骆驼,肯.莱文收起指南针等现代化设备,只拄一根木棍在后面。 10天过去了,他们走了数百英里的路程,第11天的早晨,一块绿洲出现在眼前。他们果然又回到了比塞尔。这一次肯·莱文终于明白了,比塞尔人之所以走不出沙漠,是因为他们根本没有认识北斗星。

    在一望无际的沙漠里,一个人如果凭着感觉往前走,他会走出许许多多、大小不一的圆圈,最后的足迹十有八九是一把卷尺的形状。比塞尔村处在浩瀚的沙漠中间,方圆上千公里没有一点参照物,若没有认识北斗星又没有指南针,想走出沙漠,确实是不可能的。

    肯·莱文在离开比塞尔时,带了一位叫阿古特尔的青年,这个青年就是上次和他合作的人,他告诉这位小伙子,只要白天休息,夜晚朝北面那颗最亮的星走,就能走出沙漠。阿古特尔跟着肯·莱文,3天之后果然来到了大漠的边缘。

    现在比塞尔已是西撒哈拉沙漠中一颗明珠,每年有数以万计的旅游者来到这儿,阿古特尔作为比塞尔的开拓者,他的铜像被竖在小城中央。铜像的底座上刻着一行字:新生活是从选定方向开始的。

    从以上两个调查,我们可以看出--成功,需要明确的目标和方向。故事三:如果没有目标,人生将会怎样?

    我们的人生如果没有目标的话,会出现怎样的情况呢?有一个真实的例子,说明一个人若看不到自己的目标,就会有怎样的结果:

    1952年7月4日清晨,加利福尼亚海岸笼罩在浓雾中。在海岩以西21英里的卡塔林纳岛上,一个34岁的女人涉水进入太平洋中,开始向加州海岸游去。要是成功了,她就是第一个游过这个海峡的妇女。这名妇女叫费罗伦丝·棵德威克。在此之前,她是从英法两边海岸游过英吉利海峡的第一个妇女。

    那天早晨,海水冻得她身体发麻,雾很大,她连护送她的船都几乎看不到。时间一个钟头一个钟头过去,千千万万人在电视上注视着她。有几次,鲨鱼靠近了她,被人开枪吓跑了。她仍然在游。在以往这类渡海游泳中她的最大问题不是疲劳,而是刺骨的水温。

    15个钟头之后,她被冰冷的海水冻得浑身发麻。她知道自己不能再游了,就叫人拉她上船。她的母亲和教练在另一条船上。他们告诉她海岸很近了,叫她不要放弃。但她朝加州海岸望去,除了浓雾什么也看不到。几十分钟之后--从她出发算起15个钟头零55分钟之后--人们把她们上了船。又过了几个钟头,她渐渐觉得暖和多了,这时却开始感到失败的打击。她不加思索地对记者说:“说实在的,我不是为自己找借口。如果当时我看见陆南,也许我能坚持下来。” 人们拉她上船的地点,离加州海岸只有半英里!

    后来她说,真正令他半途而费的不是疲劳,也不是寒冷,而是因为好在浓雾中看不到目标。查德威克小姐一生中就只有这一次没有坚持到底。2个月之后,她成功地游过了同一个海峡。她不但是第一位游过卡塔林纳海峡的女性,而且比男子的纪录还快了大约两个钟头。

    查德威克虽然是个游泳好手,但也需要看见目标,才能鼓足干劲完成她有能力完成的任务。因此,当我们规划自己的成功时,千万别低估了制定可测目标的重要性。

    有无目标是成功者与平庸者的分水岭

    用简单的数学知识来说,两点之间,直线最短。假设以相同的速度行进,如果一个人看到明确的目标,他就会和第二个故事中的肯·文莱一样,努力以直线前进,而很快的到达他的目的地;而如果一个人没有看到目标,他就会像在浩瀚沙漠中完全凭着感觉在摸索的比塞尔人一样,漫无目的,曲折前行,而且最终可能发现,自己又回到了起点,或经过多年的辛勤努力后,却两手空空,一无所获。一个人无论他多大年龄,他真正的人生之旅,是从设定目标那一天开始的,以前的日子,只不过是在绕圈子而已。

    目标,象分水岭一样,轻而易举地把资质相似的人们分成为少数的精英和多数的平庸之辈。前者主宰了自己的命运,后者随波逐流,枉度一生。当一个人下定决心之后,往往没什么能阻止他达到目标。一旦有了成功的渴求,就会产生强烈的使命感与责任感并为之拼搏。西方有句谚语:你想要的尽管拿去,只要付出相应的代价就行。有位哲人说:“决心攀登高峰的人,总能找到道路。”强烈的动机可以驱使人超越诸多困境,无需扬鞭自奋蹄。如果你至今仍不清楚自己希望达到怎样的人生高度,那么请把你的目标写下来,矢志不渝地向着心中的目标拼搏进取,如此,你就会敏锐地捕捉到成功的契机,顺利抵达理想的境地。

    只有我们给自己的人生设定了目标,我们内心深处那个勇敢、坚定、执着、不畏艰险的我才会走出来,我们才能最大程度地激发自己的潜能,更好的迎接人生路上的各种挑战。美国歌星玛利亚·凯莉有一首成名代表作《英雄》,歌词写的非常好:

    在你的内心深处,有一个英雄,你不必害怕自己是什么样的一个人。如果探索灵魂深处,你会发现答案,而所谓的痛苦便会消融,随后,英雄带着无穷的力量向你走来,让你抛开恐惧,确信困难终将被战胜,发掘自我,变得坚强,你会发现,英雄就在你心中。

    所以,我们要敢于梦想,敢于制定富有挑战性的目标,这样,我们的潜能才能最大程度的激发出来,才更加容易在未来的职场上获得成功。无论如何,我们不能没有目标

    当然你会说,尽管人们常说“有志者事竟成”,“天下无难事,只怕有心人”,可是现实情况却往往并非如此。的确,“想干什么”与“能干什么”不是一回事,每个人的能力、天赋和悟性都有所不同,我们确立了一个目标,也未必一定就能够百分百达到,但是,如果我们没有一个目标,我们更加不容易获得成功。因为国外有句谚语说的好:如果连你自己也不知道你要到哪里,往往你哪里

    也到不了。中国也有句古语:欲得其中,必求其上;欲得其上,必求上上。所以,不管我们制定的目标是否一定能够达到,目标对我们的成功都有着重要的积极意义。

    当然,除了我们自身的条件外,影响成功还有许多内部外界的因素,所以我们确定一个合理的目标也非常重要的。当长期从事一件事情,却看不到一点进步、一点成功的希望,那也许就该是我们反思的时刻。结合我们的兴趣、爱好、天赋、特长、能力、条件,看看我们是否走错了路。如果走错了路,不要紧,那就慎重地寻找另外一条。

    无论如何,我们不能没有目标,因为尽管我们最初确立的目标有误,在重新调整之后,我们仍有成功的希望,只不过是迟了一点。但是,如果你我根本就一直没有目标,那么我们未来成功的希望,就只能用“渺茫”二字来形容了。

    毕业生确定职业定位时应考虑的几个因素

    经过多年学习,广大应届毕业生终于要走向工作岗位了。而许多学生在毕业找工作的时候,常常面临的一个问题就是:自己上大一的时候,没有能够学习自己喜欢的专业,或经过几年的专业课学习后,发现自己当初选择的专业并不适合自己,现在马上面临毕业找工作,自己不知道是该优先考虑专业对口的工作,还是重新选择一次,选择一个适合自己的工作?

    另外还有许多学生毕业找工作的时候,经常出现的情况是:找工作时只考虑工作与专业对不对口,至于自己所学的专业和要从事的工作是否到底适合自己,从来就不曾考虑;或者是不分企业不分行业不分工作,盲目发送求职简历;或者是在求职简历的求职意向一栏,写着技术、销售、部门经理等许多只为,而对自己没有一个明确的定位;也有的同学在就业压力下,只要碰到一个单位想录用自己,则不管该行业和该工作是不是适合自己,赶紧签了就业协议书,而且可能一下就签了三五年。

    当然,许多时候,迫于就业压力,以上的种种做法也可以理解。但同时我们应看到,以上种种做法都带有一定的盲目性,没有很全面并且站在一个长远角度来考虑我们的就业问题。如果我们在找工作之前没有经过详细分析就盲目地进行了选择,那么三五年之后,我们很可能发现我们仍然面临着选择的困境:那就是继续做现在的工作,自己觉得该工作不太适合自己,甚至感觉工作的每一天都很沉闷或痛苦,工作了几年也没做出太大的成绩;如果辞职重新选择别的行业或职业,那么很可能意味着放弃现在积累的一些专业知识、行业背景和人际关系,不得不付出极高的“机会成本”。

    而实际上,我们在择业时比较科学理性的做法是:在开始找工作以前,应该首先对外界和自身的情况都进行一下全面了解和详细分析,进而初步确定自己的一个职业定位和发展方向,然后在找工作的过程中有意识的去寻找。

    从外界的角度讲,主要是当前的整体就业环境和就业趋势,各行各业的现状及发展前景,自己面临的一些就业机会,以及自己的家庭环境等因素;

    而从自身的角度讲,了解和分析的主要因素应该包括:1 、我喜欢做什么(主要包括职业兴趣、职业价值观等);

    2 、我适合做什么(主要包括职业性格、气质、天赋才干、智商情商等);3 、我擅长做什么(主要包括职业能力倾向,比如言语表达、逻辑推理、数字运算等);

    4 、我能够做什么(主要包括自己掌握的的专业知识、技能、和工作经验等);

    最后经过对以上因素的综合分析和权衡,来初步确定我们的职业定位和发展方向,并在就业过程中,按照自己的职业规划有意识的去寻找。当然,对以上因素进行“分析和权衡”的基础,是我们对自己的职业兴趣、职业性格和能力倾向等都比较熟悉和了解。如果连我们自己也不是很清楚自己真正喜欢或适合做的工作,那么我们可以借助“职业测评”这个工具手段,来进一步发现和了解自己的职业兴趣、能力倾向等职业特征和发展潜能,。

    同时,以上要素只是我们在进行职业选择时应该重点考虑的几个方面,不能说哪个重要哪个不重要,每个人的情况都有所不同,每个人还要结合自己的实际情况具体考虑。同时需要说明的是,我们在就业时有意识地去寻找最适合自己的工作,并不是说不适合自己的工作就一定不能去做了,“先就业、再择业”、“先求生存、后图发展”的就业思想,在未来很长一段时间内,对大多数应届毕业生找工作都将具有战略指导意义,只是我们在择业过程中,如果在保证就业的大前提下,能够更加的科学理性一些,无疑会更加有利于我们未来的成功。

    职业规划举例:规划路线图和分段实现大目标

    综合前面几节的知识,我们已经明白了职业规划和确定职业目标对我们人生的意义,以及确定职业目标和职业定位应该考虑的几个因素。那么,当我们初步确定了自己的职业目标和职业定位之后,我们下一步就应该围绕着我们的职业目标和职业定位,设计合理的“职业发展线路图”,最终实现我们的职业目标。

    在这里,首先和大家分享一个小故事:分段实现大目标

    1984年,在东京国际马拉松邀请赛中,名不见经传的日本选手山田本一出人意外地夺得了世界冠军。当记者问他凭什么取得如此惊人的成绩时,他说了这么一句话:凭智慧战胜对手。

    当时许多人都认为这个偶然跑到前面的矮个子选手是在故弄玄虚。马拉松赛是体力和耐力的运动,只要身体素质好又有耐性就有望夺冠,爆发力和速度都还在其次,说用智慧取胜确实有点勉强。

    两年后,意大利国际马拉松邀请赛在意大利北部城市米兰举行,山田本一代表日本参加比赛。这一次,他又获得了世界冠军。记者又请他谈经验。

    山田本一性情木讷,不善言谈,回答的仍是上次那句话:用智慧战胜对手。这回记者在报纸上没再挖苦他,但对他所谓的智慧迷惑不解。 10年后,这个谜终于被解开了,他在他的自传中是这么说的:每次比赛之前,我都要乘车把比赛的线路仔细地看一遍,并把沿途比较醒目的标志画下来,比如第一个标志是银行;第二个标志是一棵大树;第三个标志是一座红房子……这样一直画到赛程的终点。比赛开始后,我就以百米的速度奋力地向第一个目标冲去,等到达第一个目标后,我又以同样的速度向第二个目标冲去。40多公里的赛程,就被我分解成这么几个小目标轻松地跑完了。起初,我并不懂这样的道理,我把我的目标定在40多公里外终点线上的那面旗帜上,结果我跑到十几公里时就疲惫不堪了,我被前面那段遥远的路程给吓倒了。

    同样,在现实中,我们做事之所以会半途而废,这其中的原因,往往不是因为目标难度较大,而是觉得成功离我们较远。所以,我们制定目标的时候,应该把我们的职业生涯的最终目标,分解成一个个的阶段性的目标,这样的话,只要我们坚持下去,我们的职业生涯的总目标也一定能够最终实现。

    职业规划图下面大家可以看一个具体的案例:假设毕业生小张学的是市场营销,同时他比较喜欢做销售,那么他的中短期的职业生涯可以这样来规划:职业生涯规划图

    职业目标: 在 2010 年的时候,成为一家中小型企业的市场部经理开始时间 终止时间 职业 所需掌握的知识 所需掌握的技能能力和经验的积累

    12005年7月 2008年6月 销售代表 销售知识产品知识 销售技巧如何谈客户

    22008年7月 2010年6月 所在公司的销售主管 领导下属的艺术 如何激励下属团队领导能力

    32010年7月 2012年6月 所在公司区域销售经理 市场营销方面的知识如何制定市场营销目标计划 如何把一个地区的业务迅速做大

    把你的理想分成工作、家庭与社交三类。回答下面问题找到自己的答案。你想完成哪些事?想要成为什么样的人?哪些东西才能让你满足?请回答1、10年后的工作

    你希望达到哪一种入收水平?你希望寻求哪一种程度的责任?你希望拥有多大的权力?你希望从工作中获得多大的威望?2、10年后的家庭:你希望你的家庭达到哪一种生活水准?

    你希望住上哪一类房子?你喜欢哪一种旅游活动?你喜欢如何抚养你的小孩?3、10年后的社交:你希望拥有哪种朋友?你希望参加哪种社团?你希望获得哪些社团的领导职位?

    你希望参加哪些社会活动?制定人生目标必须注意:一、你的目标必须是长期的。

    没有长期的目标,你也许就会被短期的种种挫折所击倒。设定了长期的目标后,起初不要试图去克服所有的阻碍。就像你早上离家不可能等路口所有的交通灯都是绿色你才出门,你是一个一个地通过红绿灯,你不但能走到你目力所及的地方,而且当你到达那里时,你经常能见到更远的地方。

    二、你的目标必须是特定的。一个猎人,当他面对树上的一群鸟时,如果说他能打下几只鸟的话,那么他肯定不是向这群鸟射击,几只鸟的收获一定是猎人瞄准特定目标的结果。

    三、你的目标一定要远大。

    一旦你确定只走1公里路的目标,在完成还不到1公里时,你便有可能感觉到累而松懈自己,因为反正快到目标了。然而,如果你的目标是要走10公里路,你便会作好思想及其他一切必要的准备,并调动各方面的潜在力量,一鼓作气走完7、8公里后,才可能会稍微松懈一下自己。

    四、你必须实践自己的目标。

    五、你的人生大目标并不一定要详细精确。只要有个较明确的方向和大致程度要求就可以,例如立志做个卓越的科学家、立志做个大企业家或是立志做个改变世界的政治家等等。

    制定目标基本原则:一、你必须确定你的目标和起跑线。要走出迷宫除了地图和指南针外,你还要知道知自己所处的位置。

    当你一个人最终坐下来后,你就可以向自己提以下的问题,并把答案写下来:1我拥有怎样的才干和天赋?(1)什么工作我能干得最好?(2)我能比我认识的人都干得好吗?……

    2我的激情是什么?(1)有什么东西特别使我内心激动,使我分外有冲劲去完成?(2)假若有,这种冲动的激情是什么?……3我的经历有什么与众不同的地方?

    (1)我都干过哪些和别人不一样的事?(2)我的与众不同能赋予我特别的洞察力、经验和能力吗?(3)我能作出什么不寻常的事情?……4我所处的时代和环境有什么特点?

    理想往往来自人生的独特环境、地理与政治气候,历史、经济、文化背景以及许多其他因素都可能起作用。记下所有可能对你的机遇产生影响的东西。5我与什么卓越人物有来往?

    你可以与之合作的那些人的才干、天赋与激情一定会带给你靠单独工作找不到的机遇。6我期望何种需要得到满足?要知道,满足某种需要的欲望往往能激发人的理想。

    7在我的一生中,我可以想像的并且自己能作出的最伟大的事情是什么?……上面的过程一旦可能,你最好每年都做一次。如果有必要,做完了后你也可以重做一次。

    隔了几年后,你可能发现自己的理想已经改变了。如果几年来你抱着同一个理想,而且你觉得这个理想远超过自己的能力,那么你很可能已确定了人生的一个很好的理想了。在未来的岁月中,你也许发现,这个理想会有小小的修正或补充,但不会完全改变。

    其次留出几个小时的时间,用来回顾你最近所干过的事(比如生意上的)。你这样做的目的是发现你以前从未思考过的新打算。这样做的时候,其指导原则与上面第一项活动相同:

    找个安静的地方,带上所需的用品。然后,向自己提出下面这些问题,并尽可能写出答案:1我有什么才干、天赋或财力目前为止还未派上用场?

    2我所处的特殊环境和时代对我的工作或事业可能产生什么影响?3对上一个问题,我的答案能带来什么机遇?

    4假若我有无限的财力,而且我确信我的努力都能成功,那么我的生意上的目标是什么?(记住,一定要有远大的目标!)

    5我的熟人中有谁的目标和我的目标近似?我和他们是否可以互相提携?

    二、你必须把目标清楚地表述出来。切记,你在表述你的人生目标时,一定要以你的梦想和个人的信念作为基础。三、把整体的目标分解成一个个易记的目标单元。

    表达目标的方式多种多样。目标可以用业绩表示(如推销1000件某种产品),也可以用时间表示(如每周3次,每次锻炼1个小时)。目标可以涉及人生的领域,视你想取得什么成就而定。拿破仑·希尔列举了一些可能的目标领域。

    个人发展;身体健康;专业成就;人际关系;家庭责任;财务安排。……

    想到什么目标不妨先写下来。起初,你没必要判断这些目标是不是能够实现,也不要管它们是长期的还是短期的。这个阶段重要的是有创意,有梦想。把能想到的都写下来后,再对照你的人生目标仔细地检查一下。其后,不妨问自己两个问题:

    其一目标是否使自己向确定的理想迈进了一步?如果你发现这些目标之中有什么与你的人生目标和你的理想不符合,一般来说你可以有两种选择:1、把它去掉、忘掉;

    2、重新评估你的人生目标,考虑改写。二者必居其一。其二你已经记下了为实现理想必须达到的2个至5个目标了吗?

    这个问题能帮助你弄清楚你所定下的目标是不是齐全了。如果发现你的理想要求你达到另外几个目标,就把这几个也写下来。当你把目标都记下来后,你就可以着手制定走向成功的战略了。

    四、你的短期目标不但要有激励价值,而且要现实可行。五、你的中短期目标应尽可能具体明确,并有具体的时间限制。六、你必须行动起来。否则一切都成为空想。

    七、你应该定期评估计划的执行情况。

    定期评测进展,这和你的行动同样重要。随着计划的进展,你有时会发现你的短期目标并没有使你向长期目标靠拢;也许,你可能发现你当初的目标不怎么现实;又也许你会觉得你的中长期目标中有一个并不符合你的理想及人生的最终目标。不管是怎样的情况,你都需要作出调整。你可以把下面这句话贴在最能引起你注意的地方:

    “我现在做的事情会使我更接近我的目标吗?”八、你应该庆贺自己已取得的成就当一切都已经成为现实之后,一定要记住抽点时间庆祝已取得的成就。

    拿破仑·希尔成功学历来相信奖励制度。你取得预期的成果后,你自然应该奖励自己,善待自己。小成果小奖,大成果大奖。但是绝不能在完成任务之前提前消费,奖励自己。

    最好,当你取得一项重大成就时,一定要把对自己成功的庆贺办得终身难忘。如何定制你自己的价值连城的个人成功计划

    拿破仑·希尔的成功学为你提供了一个“价值连城的个人成功计划”方案,在此我们不妨提供给你,供你研习参照。第一、你应该使自己的想学明确可见。

    明确你自己想达到什么具体目标,把它清楚的描述出来并写下来,然后专心一致地实现它。第二、制定实现目标的计划,并定出最后限期。

    你应该为你的计划制定出详细的实施步骤和详尽的时间表,规划出不同时期的进度,例如每小时的、每日的、每月的。千万别忘记,有组织的工作和持续的热情是力量的源泉。

    第三,对于希望要取得的人生企求,你应该保持真诚的态度。

    积极的心态(PMA心态)是人类一切活动的原动力。成功的欲望会给你植入“成功意识”,成功意识又反过来培养出越来越强的成功习惯。

    第四,你应该无限信任自己和自己的能力。你无论做什么事,内心要有绝对成功的信心。你应该随时想着自己的长处而不是短处,想着自己的能力而不是困难。

    第五,你应该要有把计划进行到底的坚强决心。坚定的决心是任何别的东西都无法代替的。以下是制定个人成功计划的具体步骤:1把你在确定自己人生理想时写下的东西多看几遍。

    温习是一次再思索。你可以以你已经写下的人生理想为基础,写出一份陈述。陈述要写得简单,但要包括你想做的一切。陈述应该包括:(1)我人生活动的重点是什么?

    (2)我想做这些事情的原因是什么?(3)我打算如何做到这些事情?在这里我们提供了几个可能的答案兹录于后,仅供你参考:

    我打算以行医来服务公众,目的是尽最大努力地帮助一些不幸的人改善他们的生活;我期望通过爱护、教导和培养别人来帮助他们找到自己的人生目的,作出他们的贡献;

    我期望通过向顾客提供最好的产品和服务,以达到生意成功,收入不菲。这样,我能够用赚得的钱来照顾家人及其他人;我希望投身于国家的武装力量,保家卫国;……

    写好了目标陈述后,你最好在最初几周每天看一次,看看这份陈述是否准确代表你的人生目标。2花几个小时来检查一下自己,看自己是不是能走出已确定的远大目标。

    你能够以从人生的总体目标开始,找到实现人生总体目标所必须达到的那些主要目标。你也许会想出数百个主要目标。

    但是你一定要花一些时间仔细检视这些人生主要目标,看看你是否真的觉得它们很重要。3你也可以花1个小时的时间把每一个人生的具体目标仔细地阅读一遍。

    阅读的时候,你也可以把一个具体的人生目标分解成几个必须达到的中长期目标,甚至将其分解成每周、每月可以执行的任务。这些活动将帮助你描绘成功的蓝图。

    4这样处理过每个人生目标之后,你就会懂得要成功就必须做什么。把每天、每周、每月的活动组织一下。5评估你的目标。

    确定你的目标是否现实。弄清哪几个目标是需要你与别人合作才能达到的。记下需要别人帮助的目标,以及可以给你提供帮助的人。如何实现你的目标在实现你的目标前再次确认:

    一、你的目标是否已经很确定、是否量化,例如一年后我要拥有100万。二、你是否坚强的决心,相信你自己可以创造奇迹。宜且要时时记住,“这件事对我的目标是否有帮助”。

    倘若答案是否定的,你自己不必去做;如果是肯定的,就要加紧推进。我们没法一下子成功,只能一步步走向成功。所谓优良的计划,就是自行确定的每个月的配额或清单。

    想想看,你该如何才能提高自己的效率。现在开始“30天改善计划”

    你可以在你计划的标题下填入你1个月以内必须做到的事情,1个月以后再检查一下进度,并再次建立新的目标。例如,你可以在你的计划中写上:1改掉这些习惯(举例说明)

    (1)不按时完成各种事情。(2)消极性的话语。(3)每天看电视超过60分钟。(4)无意义的闲聊。2养成这些习惯(举例说明)

    (1)每天早上出门前检查一下自己的仪表。(2)每一天的工作都在前一天晚上就计划好。(3)任何场合尽量赞美别人。3用这些方法来增加工作效率

    (1)尽量发掘下属的工作潜力。(2)进一步学习公司的业务。(例如,尽量弄清公司的业务有哪些?顾客又是哪些人?)(3)提出三项改善公司业务的建议。

    4用这些方法来增加家庭的和谐(1)对太太(丈夫)为你做的小事表示更大的谢意,不可像往常一样认为理所当然。(2)每周一次带家人做些特别的活动。

    (3)每天固定安排1小时和家人相处在一起。5用下面的方法来培养个性(1)每周花两个小时阅读自己本专业的杂志。(2)阅读1本励志书籍。(3)结交4个新朋友。

    (4)每天静静思考30分钟。目标实现法一个人设定目标时,最重要的并非“如何”实现这个目标,而是“为何”要设定些目标,“为何”比“如何”更重要。

    步骤一:列下实现目标理由成功者在设定目标的同时,也会找出设这些目标理由来说服自己。当他十分清楚地知道实现目标的好处以及不实现目标坏处时便会马上设下时限来

    规范自己。步骤二:设下时限一般人如果没有时限来集中注意力的话,很难检查出自己在不同时间段到底做到什么程度了。因此,当明确知道目标之后,便要设下明确的实行时限。

    步骤三:列下实现目标所需的条件。若不知实现该目标所需的条件时,如何去进行则会模糊。比如你想进哈佛大学就读,却不知哈佛的录取标准,则进入哈佛必定有所困难,如果明确

    知道它的录取标准,则更能按部就班地达到它所要求的标准。步骤四:自问“假如要实现目标话,我自己必须变成什么样的人?”并在纸上列下来

    很多人想成功,却不清楚成功者所具备的条件。我通常列出成功者所需具备的26项条件,让自己知道该往哪个方面迈进,成为怎样的人。

    例如,你的目标三年内当经理,接下来便把当经理的条件和能力列出来,明确告诉自己就是要成为那样的人。步骤五:列下目前不能实现目标的所有原因,从难到易排列其困难度,

    自问“现在马上用什么办法来解决那些问题”,并逐项写下。列完解答之后,这些解答通常就是立即可以采取的行动,并且十分明确。

    步骤六:下定承诺,直到实现目标为止,否则绝不放弃。许多人只是对目标“有兴趣”,但并未决定一定要实现目标,因为当然

    无法实现。“有兴趣”不会让你成功,“决定成功”才能让你成功。步骤七:设下时间表,从实现目标的最终期限倒推至现在

    例如,你决定三年之内当上经理,则列下后两后内要做到的程度,今年内要做到的程度,每个月要做到的程度及每天该做的事。步骤八:马上采取行动,现在开始

    步骤九:衡量每天的进度,每天检查成果若每年检查一次实施成果,则一年只有一次机会可以改正错误,若每月

    检查一次,则有12次机会改正错误,若每天衡量一次,则就有300多次机会,更遑论每天衡量数次进度了,机会当然相对增加。快速实现目标将它具体化

    重点在于把所有目标写在纸上,尽量具体化,例如想买汽车把汽车照片贴在眼睛右上方看得到的部位,每天早晚利用5——10分钟的时间,想象你

    已拥有这部车,并获得拥有该车的所有好处,这会加速你实现愿望的时间。1、请设定个最想要达成的目标,并列出五项实现目标的理由。

    2、请写下若实现目标有哪些好处及不实现目标哪些坏处?3、你现在愿意做哪些事情,使你可以得到所期望的结果。恭喜您,您又进步了一点点!
    展开全文
  • 机器学习

    千次阅读 2020-01-09 22:01:52
    机器学习在我个人看来就是运用相关的算法,某件事一次又一次地重复,直到达到自己想要的目标 机器学习的分类 学习策略的分类标准就是根据学生实现信息转换所需的推理多少难易程度来分类的,依从简单到复杂,从少...

    机器学习介绍

    机器学习在我个人看来就是运用相关的算法,对某件事一次又一次地重复,直到达到自己想要的目标

    机器学习的分类

    学习策略的分类标准就是根据学生实现信息转换所需的推理多少和难易程度来分类的,依从简单到复杂,从少到多的次序分为以下六种基本类型:

    1. 机械学习(Rote learning)
      学习者无需任何推理或其它的知识转换,直接吸取环境所提供的信息。如塞缪尔的跳棋程序,纽厄尔和西蒙的LT系统。这类学习系统主要考虑的是如何索引存贮的知识并加以利用。系统的学习方法是直接通过事先编好、构造好的程序来学习,学习者不作任何工作,或者是通过直接接收既定的事实和数据进行学习,对输入信息不作任何的推理。
    2. 示教学习(Learning from instruction或Learning by being told)
      学生从环境(教师或其它信息源如教科书等)获取信息,把知识转换成内部可使用的表示形式,并将新的知识和原有知识有机地结合为一体。所以要求学生有一定程度的推理能力,但环境仍要做大量的工作。教师以某种形式提出和组织知识,以使学生拥有的知识可以不断地增加。这种学习方法和人类社会的学校教学方式相似,学习的任务就是建立一个系统,使它能接受教导和建议,并有效地存贮和应用学到的知识。不少专家系统在建立知识库时使用这种方法去实现知识获取。
    3. 演绎学习(Learning by deduction)
      学生所用的推理形式为演绎推理。推理从公理出发,经过逻辑变换推导出结论。这种推理是"保真"变换和特化(specialization)的过程,使学生在推理过程中可以获取有用的知识。这种学习方法包含宏操作(macro-operation)学习、知识编辑和组块(Chunking)技术。演绎推理的逆过程是归纳推理。
    4. 类比学习 (Learning by analogy)
      利用二个不同领域(源域、目标域)中的知识相似性,可以通过类比,从源域的知识(包括相似的特征和其它性质)推导出目标域的相应知识,从而实现学习。类比学习系统可以使一个已有的计算机应用系统转变为适应于新的领域,来完成原先没有设计的相类似的功能。
      类比学习需要比上述三种学习方式更多的推理。它一般要求先从知识源(源域)中检索出可用的知识,再将其转换成新的形式,用到新的状况(目标域)中去。类比学习在人类科学技术发展史上起着重要作用,许多科学发现就是通过类比得到的。
    5. 基于解释的学习(Explanation-based learning, EBL)
      学生根据教师提供的目标概念、该概念的一个例子、领域理论及可操作准则,首先构造一个解释来说明为什该例子满足目标概念,然后将解释推广为目标概念的一个满足可操作准则的充分条件。EBL已被广泛应用于知识库求精和改善系统的性能
    6. 归纳学习(Learning from induction)
      归纳学习是由教师或环境提供某概念的一些实例或反例,让学生通过归纳推理得出该概念的一般描述。这种学习的推理工作量远多于示教学习和演绎学习,因为环境并不提供一般性概念描述(如公理)。从某种程度上说,归纳学习的推理量也比类比学习大,因为没有一个类似的概念可以作为"源概念"加以取用。归纳学习是最基本的,发展也较为成熟的学习方法,在人工智能领域中已经得到广泛的研究和应用。

    总结

    机器学习最主要的应用领域有:专家系统、认知模拟、规划和问题求解、数据挖掘、网络信息服务、图象识别、故障诊断、自然语言理解、机器人和博弈等领域。
    从机器学习的执行部分所反映的任务类型上看,大部分的应用研究领域基本上集中于以下两个范畴:分类和问题求解。
    (1)分类任务要求系统依据已知的分类知识对输入的未知模式(该模式的描述)作分析,以确定输入模式的类属。相应的学习目标就是学习用于分类的准则(如分类规则)。
    (2)问题求解任务要求对于给定的目标状态,寻找一个将当前状态转换为目标状态的动作序列;机器学习在这一领域的研究工作大部分集中于通过学习来获取能提高问题求解效率的知识(如搜索控制知识,启发式知识等)。

    展开全文
  • 手把手教你训练自己目标检测模型(SSD篇)

    万次阅读 多人点赞 2018-12-24 22:50:46
    在动手训练自己目标检测模型之前,建议先了解一下目标检测模型的原理(见文章:大话目标检测经典模型RCNN、Fast RCNN、Faster RCNN,以及Mark R-CNN),这样才会更加清楚模型的训练过程。 本文将在我们前面搭...
  • 制定自己的SMART目标

    千次阅读 2016-09-24 22:36:14
     SMART目标代表具体的、可度量的、可实现的、相关的时间可控的(Specific,Measurable,Achievable,Relevant,and Time_boxed). 对于任何目标(减肥,加薪升职等),你都需要制定一个计划,定出一系列帮助你能实现...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠高效地传输,虽然用户...
  • 在动手训练自己目标检测模型之前,建议先了解一下目标检测模型的原理(见文章:大话目标检测经典模型RCNN、Fast RCNN、Faster RCNN,以及Mark R-CNN),这样才会更加清楚模型的训练过程。 本文将在我们前...
  • Yalmip + Cplex 优化求解电力系统机组组合问题

    万次阅读 多人点赞 2019-10-29 20:23:29
     注:Yalmip默认求解的是最小值,如果要求最大值需在目标函数前加一个负号 -f  3、约束条件  st = []; 为自己定义一个存储约束条件的矩阵  st = [st,]; 新增约束  例如:st = [st,0(1)]; 就此...
  • YOLO系列可以说是单机目标检测框架中的潮流前线了,由于YOLOv5是在PyTorch中实现的,它受益于成熟的PyTorch生态系统,支持更简单,部署更容易,相对于YOLOv4,YOLOv5具有以下优点: 速度更快。在YOLOv5 Colab ...
  • 目标优化详解【转载】

    万次阅读 多人点赞 2017-09-02 11:05:47
    生活中 ,许多问题都是由相互冲突影响的多个目标组成。人们会经常遇到使多个目标在给定区域同时尽可能最佳的优化问题 ,也就是多目标优化问题。优化问题存在的优化目标超过一个并需要同时处理 ,就成为多目标优化...
  • 目标分类与目标检测

    千次阅读 2019-05-10 11:00:29
    如果你这种目标检测的方法很感兴趣,还想了解更多将滑动窗口、图像金字塔图像分类方法用于目标检测内容,请请参阅我的书,Deep Learning for Computer Vision with Python 方法 2:目标检测框架的基础网络 ...
  • 1. 制作符合要求的VOC数据集 目标:制作如下格式的文件夹 格式: --VOC2017(大写字母+数字) --Annotations(存放储存标注信息的xml) --ImageSets --Main(存放储存图片名的train.txttest.txt) --Layout ...
  • 目标检测中算法评价指标FPSmAp的原理代码实现

    千次阅读 多人点赞 2020-10-13 11:30:00
    点击上方“码农的后花园”,选择“星标”公众号精选文章,第一时间送达FPSmAP是目标检测算法的两个重要评估指标,FPS是用来评估目标检测的速度,即每秒内可以处理的图片数量或者处理一...
  • 目标检测 数据集—标注工具 labelImg/labelme

    万次阅读 多人点赞 2018-12-15 20:21:20
    目标检测中,我们需要原始图片数据集做标注,告诉机器我们需要的目标,然后让机器去学习,这个过程是非常重要的。我之前做目标检测时都是直接下载公开的数据集,比赛的数据集,因为简单方便。 如今自己需要另外...
  • 深度学习目标检测工具箱mmdetection,训练自己的数据 商汤科技(2018 COCO 目标检测挑战赛冠军)香港中文大学最近开源了一个基于Pytorch实现的深度学习目标检测工具箱mmdetection,支持Faster-RCNN,Mask-RCNN,...
  • 再加上目标形态千差万别,目标和背景重合等问题,使得目标检测难上加难。 传统的目标检测算法包括三个阶段,首先生成目标建议框,接着提取每个建议框中的特征,最后根据特征进行分类。以下是这三个阶段的具体过程: ...
  • 写个汇总方便自己看,顺便学习CSDN写文章的方法
  • 目标识别

    万次阅读 多人点赞 2016-08-28 23:15:40
    人们认识世界的重要知识来源就是图像信息,在很多场合,图像所传送的信息比其他形式的信息更丰富、真切具体。人眼与大脑的协作使得人们可以获取、处理以及理解视觉信息,人类利用视觉感知外界环境信息的效率很高。...
  • (keras)yolov3特定目标检测&自己图片做训练集

    万次阅读 多人点赞 2018-10-24 14:27:52
    特定目标检测 自己的图片标注成Pascal VOC格式数据集 安装工具labelImg 操作方法 voc数据转化准备 建立文件夹 使用脚本自动划分数据集 生成yolo格式文件 训练 修改加载路径 修改网络配置 重新生成h5...
  • SMART原则助你设定有效目标

    万次阅读 2015-11-17 06:37:55
    目标就可以让人工作生活充满动力,SMART原则指导我们如何设定有效目标……
  • 深度学习中,为了提高模型的精度泛化能力,往往着眼于两个方面:(1)使用更多的数据(2)使用更深更复杂的网络。 ** 一、什么是负样本 ** 负样本是指不包含任务所要识别的目标的图像,也叫负图像(Negtive ...
  • 目标检测(Object Detection)

    万次阅读 多人点赞 2020-11-20 19:38:58
    文章目录目标检测(Object Detection)一、基本概念1. 什么是目标检测2. 目标检测的核心问题3. 目标检测算法分类1)Tow Stage2)One Stage4. 目标检测应用1)人脸检测2)行人检测3)车辆检测4)遥感检测二、目标检测...
  • 两阶段目标检测综述

    千次阅读 2019-07-21 11:45:14
    两阶段目标检测 在上个世纪,深度神经网络就已经被提出了,但是在当时机器硬件还未达到实验要求,深度神经网络便沉浸了10年。在21世纪初,当机器硬件达到实验要求之后,深度神经网络就得到了快速的发展。在CNN[7]还...
  • 题目:给定一个整数数组 nums 一个目标值 target,请你在该数组中找出目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 ...
  • 对于第二种,我猜想可能是在实际应用中,为了方便,不区分适应度函数和目标函数,二者混用,确实表达的是一个意思。所幸,这一点在运用时并不会产生什么麻烦。       起初接触遗传算法时,想到要自己设置种群...
  • 目标检测系列——目标检测方法发展综述

    千次阅读 多人点赞 2020-03-23 20:33:31
    目标检测的目标是确定某张给定图像中是否存在给定类别(比如人、车、自行车、狗猫)的目标实例;如果存在,就返回每个目标实例的空间位置覆盖范围(比如返回一个边界框)。 目标检测的意义 作为图像理解计算机...
  • 本来打算直接看论文,却发现文章中的的很多基本概念都搞不清楚,于是就自己先梳理了一些定位检测任务的基本概念。(内容主要来自斯坦福大学的CS231课程、吴恩达的deeplearning.ai卷积部分,这两门课程都可以在网易...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 693,472
精华内容 277,388
关键字:

对自己的要求和目标