精华内容
下载资源
问答
  • 深度学习笔记(19) 多任务学习

    万次阅读 2019-06-16 08:47:49
    多任务学习概念、物体检测的多任务学习、多任务学习的条件


    1. 多任务学习概念

    在迁移学习中,步骤是串行的,从任务A里学习只是然后迁移到任务B

    在多任务学习中,步骤是同时开始学习的
    试图让单个神经网络同时做几件事情
    然后希望这里每个任务都能帮到其他所有任务


    2. 物体检测的多任务学习

    来看一个例子,假设在研发无人驾驶车辆
    那么无人驾驶车可能需要同时检测不同的物体
    比如检测行人、车辆、停车标志,还有交通灯等其他各种东西

    比如在下边边这个例子中,图像里有个停车标志,然后图像中有辆车,但没有行人,也没有交通灯

    在这里插入图片描述
    如果输入图像是x(i),那么这里不再是1个标签y(i),而是有4个标签
    也许y^((i))的维数会更高,现在就先用4个
    所以 y^((i))是个4×1向量

    如果从整体来看这个训练集标签和以前类似
    将训练集的标签水平堆叠起来,像这样 y(1)一直到 y(m)

    在这里插入图片描述
    不过现在y(i)是4×1向量
    所以这些都是竖向的列向量
    所以这个矩阵Y现在变成4×m矩阵
    而之前,当y是单实数时,这就是1×m矩阵

    那么现在可以做的是训练一个神经网络,来预测这些y值
    输入x,现在输出是一个四维向量y
    请注意,这里输出画了四个节点
    第一个节点就是想预测图中有没有行人,第二个输出节点预测的是有没有车,这里预测有没有停车标志,这里预测有没有交通灯,所以这里^y是四维的
    在这里插入图片描述
    训练神经网络,需要定义神经网络的损失函数,对于一个输出^y,是个4维向量,对于整个训练集的平均损失:
    在这里插入图片描述
    4j=1 LL(yj(i) ,yj(i))是单个预测的损失
    所以这是对四个分量的求和,行人、车、停车标志、交通灯
    这个标志LL 指的是 logistic损失:
    在这里插入图片描述

    这与softmax回归的主要区别在于, softmax是将单个标签分配给单个样本
    然后发现,训练一个神经网络做四件事情会比训练四个完全独立的神经网络分别做四件事性能要更好


    3. 多任务学习的条件

    1. 如果训练的一组任务,可以共用低层次特征
      对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的
      这些物体有相似的特征

    2. 如果每个任务的数据量很接近(这个准则没有那么绝对,所以不一定是对的)
      在多任务学习中,通常有更多任务而不仅仅是两个
      但比如说要完成100个任务,而要做多任务学习
      尝试同时识别100种不同类型的物体
      可能会发现,每个任务大概有1000个样本
      所以如果专注加强单个任务的性能
      比如专注加强第100个任务的表现,用A100表示
      如果试图单独去做这个最后的任务,只有1000个样本去训练这个任务
      但这只是100项任务之一
      而通过在其他99项任务的训练,加起来一共100k个样本,大幅提升算法性能
      如果有对称性,其他99个任务
      也许能提供一些数据或提供一些知识来帮到这100个任务中的每一个任务
      所以第二点不是绝对正确的准则,但通常会看的是如果专注于单项任务
      如果想要从多任务学习得到很大性能提升
      那么其他任务加起来必须要有比单个任务大得多的数据量

    3. 当训练一个足够大的神经网络,同时做好所有的工作
      所以多任务学习的替代方法是为每个任务训练一个单独的神经网络
      所以不是训练单个神经网络同时处理行人、汽车、停车标志和交通灯检测
      可以训练一个用于行人检测,一个用于汽车检测,一个用于停车标志检测和一个用于交通信号灯检测的神经网络

    多任务学习会降低性能的唯一情况和训练单个神经网络相比性能更低的情况
    就是神经网络还不够大
    但如果可以训练一个足够大的神经网络
    那么多任务学习肯定不会或者很少会降低性能
    都希望它可以提升性能,比单独训练神经网络来单独完成各个任务性能要更好

    多任务学习能让训练一个神经网络来执行许多任务
    这可以带来更高的性能,比单独完成各个任务更高的性能
    但要注意,实际上迁移学习比多任务学习使用频率更高


    参考:

    《神经网络和深度学习》视频课程


    相关推荐:

    深度学习笔记(18) 迁移学习
    深度学习笔记(17) 误差分析(二)
    深度学习笔记(16) 误差分析(一)
    深度学习笔记(15) 人的表现
    深度学习笔记(14) 评估指标


    谢谢!

    展开全文
  • C语言多任务,多进程,多线程

    千次阅读 2018-04-03 15:44:08
    多任务的概念人们已经非常熟悉了,它是指用户可以在同一时间内运行多个应用程序。Linux就是一种支持多任务的操作系统,它支持多进程、多线程等多任务处理和任务之间的多种通信机制。Linux下多任务机制的介绍多任务...

    多任务的概念人们已经非常熟悉了,它是指用户可以在同一时间内运行多个应用程序。Linux就是一种支持多任务的操作系统,它支持多进程、多线程等多任务处理和任务之间的多种通信机制。

    Linux下多任务机制的介绍

    多任务处理是指用户在同一时间内运行多个应用程序,每个应用程序被称做一个任务。Linux就是一个支持多任务的操作系统,它比单任务系统的功能增强了许多。当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一个任务提供服务。由于任务调度机制保证了不同的任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。多任务系统中有3个功能单位:任务、进程和线程,下面分别进程介绍。

    1、任务

    任务是一个逻辑概念,指由一个软件完成的活动,或者是一系列共同达到某一个目的的操作。通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务就是进程或线程。例如,一个杀毒软件的一次运行是一个任务,目的是从各种病毒的侵害中保护计算机系统,这个任务包含多个独立功能的子任务(进程或线程),包含实时监控功能、定时查杀功能、防火墙功能及用户交互功能等。个人理解:就好比假设一个应用程序中由一个或多个可执行文件共同执行组成,那么此应用程序的一次执行就是一个任务,而这些可执行文件的执行就是一个进程的执行,而可执行文件是由一个线程或多个线程构成的,当只有一个线程构成了这个进程,则此时进程和线程就是一样的概念(可执行文件的一次运行)。

    2、进程

    进程的基本概念

    进程是一个具有独立功能的程序在某个数据集上的一次动态执行过程,它是系统进行资源分配和调度的基本单位(个人理解:系统好比是一个大型的任务,由多个进程(可执行文件)构成,而资源分配和资源调度分别都是一个进程,所以进程是系统进行资源分配和调度的基本单位)。一次任务的运行可以并发激活多个进程,这些进程相互合作来完成该任务的一个最终的目标。

    进程具有并发性、动态性、交互性、独立性和异步性等主要特性

    • 并发性:指的是系统中多个进程可以同时并发执行,相互之间不受干扰。
    • 动态性:指的是进程都有完整的生命周期,而且在进程的生命周期内,进程的状态是不断变化的。另外,进程具有动态的地址空间(包括代码、数据和进程控制块)。
    • 交互性:指的是进程在执行过程中可能会与其他进程发生直接和间接的交互操作,如进程同步和进程互斥等,需要为此添加一定的进程处理机制。
    • 独立性:指的是进程是一个相对完整的资源分配和调度的基本单位,各个进程的地址空间是相互独立的,只有采用某些特定的通信机制才能实现进程间的通信。
    • 异步性:指的是每个进程都按照各自独立的、不可预知的速度向前执行。
    进程和程序是有本质的区别:程序是静态的一段代码,是一些保存在非易失性存储器的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括动态创建、调度和消亡的整个过程,它是程序执行和资源管理的最小单位。
    Linux系统中包括以下几种类型的过程:
    • 交互式过程:这类进程进程与用户进程交互,因此要花很多时间等待用户的交互操作(键盘和鼠标操作等)。当接收到用户的交互操作后,这类进程应该很快被允许,而且相应时间的变化也应该很小,否则用户就会觉得系统反应迟钝或者不太稳定。典型的交互式进程有shell命令进程、文本编辑器和图形应用程序运行等。
    • 批处理进程:这类进程不必与用户进行交互,因此进程在后台运行。因为这类进程通常不必很快地相应,因此往往受到调度器的“慢待”。典型的批处理进程有编译器的编译操作、数据库搜索引擎等。
    • 实时进程:这类进程通常对调度响应时间有很高的要求,一般不会被低优先级的进程阻塞。它们不仅要求很短的响应时间,而且更重要的是响应时间的变化应该很小。典型的实时进程有视频和音频的应用程序、实时数据采集系统程序等。

    Linux下的进程结构

    进程不但包括程序的指令和数据,而且包括程序计数器和处理器的所有寄存器以及存储临时数据的进程堆栈,因此正在执行的进程包括处理器当前的一切活动。
    因为Linux是一个多进程的操作系统,所以其他的进程必须等到系统将处理器使用权分配各自己之后才能运行。当正在运行的进程等待其他的系统资源时,Linux内核将取得处理器的控制权,并将处理器分配给其他正在等待的进程,它按照内核中的调度算法决定处理器分配给哪个进程。
    内核将所有进程存放在双向循环链表(进程链表)中,其中链表的头是init_task描述符。链表的每一项都是类型为task_struct,称为进程描述符的结构,该结构包含了与一个进程相关的所有信息,定义在<include/linux/sched.h>文件中。task_struct内核结构比较大,它能完整地描述一个进程,如进程的状态、进程的基本信息、进程标识符、内存相关信息、父进程相关信息、与进程相关的终端信息、当前工作目录、打开的文件信息、所接收到的信号信息等。
    下面详细讲解task_struct结构中最为重要的两个域:state(进程状态)和pid(进程标识符,即进程号)。
    1)进程状态,Linux中的进程有以下几种状态
    • 运行状态(TASK_RUNNING):进程当前正在运行,或者正在运行队列中等待调度。
    创建一个task.c文件,task.c文件内容如下:

    保存后,输入gcc task.c -o task编译生成二进制代码task,输入./task运行task进程

    打开另一个终端,输入ps -aux查看进程状态:(ps -axjf 可查看进程有哪些子进程,ps -e 也 可以查到进程的状态,但只显示进程的PID、TTY、TIME和CMD)
    ps工具标识进程的5中状态码:
    D 不可中断 uninterruptible sleep (usually IO)
    R 运行 runnable (on run queue)
    S 中断 sleeping
    T 停止 traced or stopped
    Z 僵尸 a defunct ("zombie") process
    注:其它状态还包括W(无驻留页),<(高优先级进程),N(低优先级进程),L(内存锁页)
    每列对应关系:
    USER:进程所有者      
    PID:进程ID    
    %CPU:占用CPU的使用率   
    %MEM:占用内存的使用率   
    VSZ:占用虚拟内存大小 
     RSS:占用内存大小 
    TTY:终端次要装置号码   
    STAT:进程状态  
    START:进程启动时间    
    TIME:进程消耗cup时间   
    COMMAND:命令的名称和参数


    • 可中断的阻塞状态(TASK_INTERRUPTIBLE):进程处于阻塞(睡眠)状态,正在等待某些事件发生或能够占用某些资源。处在这种状态下的进程可以被信号中断。接收到信号或被显式的唤醒呼叫(如调用wake_up系列宏:wake_up、wake_up_interruptible等)唤醒之后,进程转变为TASK_RUNNING状态。
    • 不可中断的阻塞状态(TASK_UNINTERRUPTIBLE):此进程状态类似于可中断的阻塞状态(TASK_INTERRUPTILBE),只是它不会处理信号,把信号传递到这种状态下的进程不能改变它的状态。在一些特定的情况下(进程必须等待,直到某些不可被中断的事件发生),这种状态是很有用的。只有在它所等待的事件发生时,进程被显式的唤醒呼叫唤醒。
    • 可终止的阻塞状态(TASK_KILLABLE):Linux内核2.6.25引入了一种新的进程状态,名为TASK_KILLABLE。该状态的运行机制类似于TASK_UNINTERRUPTILBE,只不过在该状态下的进程可以响应致命信号。它可以替代有效但可能无法终止的不可中断的阻塞状态,以及易于唤醒安全性欠佳的可中断的阻塞状态。
    • 暂停状态(TASK_STOPPED):进程的执行被暂停,当进程收到SIGTOP、SIGTSTP、SIGTTIN、SIGTTOU等信号时,就会进入暂停状态。
    • 跟踪状态(TASK_TRACED):进程的执行被调试器暂停。当一个进程被另一个进程监控是(如调试器使用ptrace()系统调用监控测试程序),任何信号都可以把这个进程置于跟踪状态。
    • 僵尸状态(EXIT_ZOMBIE):进程运行结束,父进程尚未使用wait函数族(如使用waitpid()函数)等系统调用来“收尸”,即等待父进程销毁它。处于该状态下的进程“实体”已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能调度,仅仅在进程列表保留一个位置,记载该进程的退出状态等信息供其他进程收集。
    • 僵尸撤销状态(EXIT_DEAD):这是最终状态,父进程调用wait函数族“收尸”后,进程彻底有系统删除。
    它们之间的转换关系如图所示:

    内核可以使用set_task_state和set_current_state宏来改变指定进程的状态和当前执行进程的状态。
    2)进程标识符
    Linux内核通过唯一的进程标识符PID来标识每个进程。PID存放进程描述符的pid字段中,新创建的PID通常是前一个进程的PID加1,不过PID的值有上限(最大值 = PID_MAX_DEFAULT - 1,通常为32767),我们可以在终端输入 vim /proc/sys/kernel/pid_max 来确定该系统的进程数上限。
    当系统启动后,内核通常作为一个进程的代表。一个指向task_struct的宏current用来记录正在运行的进程。current经常作为进程描述符结构指针的形式出现在内核代码中,例如,current->pid表示处理器正在执行进程的PID。当系统需要查看所有的进程时,则调用for_each_process()宏,这将比系统搜索数组的速度要快得多。
    在Linux中获得当前进程的进程号(PID)和父进程号(PPID)的系统调用函数分别为getpid()和getppid()。
    测试代码:

    测试结果:

    输入 ps -axjf 命令查看所有进程与父进程

    我们在次输入ps -aux命令查看所有进程,可以得知父进程为bash

    进程的创建、执行和终止

    1)进程的创建和执行
    许多操作系统提供的都是产生进程的机制,也就是说,首先在新的地址空间里创建进程、读入可执行文件、最后在开始执行。Linux中进程的穿件很特别,它把上述步骤分解到两个单独的函数中去执行:fork()和exec函数族。首先fork()函数通过复制当前进程创建一个子进程,子进程与父进程的区别在于不同的PID、PPID和某些资源及统计量。exec函数族负责读取可执行文件并将其载入地址空间开始运行。
    要注意的是,Linux中的fork()函数使用的是写时复制页的技术,也就是内核在创建进程时,其资源并没有被复制过来,资源的复制仅仅只有在需要写入数据时才发生,在此之前只是以只读的方式共享数据。写时复制技术可以使Linux拥有快速执行的能力,因此这个优化是非常重要的。
    2)进程的终止
    进程终结也需要做很多繁琐的收尾工作,系统必须保证回收进程所占的资源,并通知父进程。Linux首先把终止的进程设置为僵尸状态,这时,进程无法投入运行,它的存在只为父进程提供信息,申请死亡。父进程得到信息后,开始调用wait函数族,最后终止子进程,子进程占用的所有资源被全部释放。

    进程的内存结构

    Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。该地址空间是大小为4GB的线性虚拟空间(当然是指32位系统),用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址。利用这种虚拟地址不但能起到保护操作系统的效果(用户不能直接访问物理内存),而且更重要的是,用户程序可以使用比实际物理内存更大的地址空间。
    我们可以通过命令getconf LONG_BIT 来查询当前自己的系统是多少位的?

    我的安装的UbuntKylin是64位的,即实际内存最大可能达到2^64 = 128GB。(2^10 = 1kb,2^30 = 1GB)。
    4GB的进程地址空间会被分出两部分:用户空间与内核空间。用户地址空间是从0~3GB(0xC0000000),内存地址空间占据3GB~4GB。用户进程通常情况下只能访问用户控件的虚拟地址,不能访问内核空间的虚拟地址。只有用户进程使用系统调用(代表用户进程在内核执行)时可以访问内核空间的虚拟空间。每当进程切换时,用户空间就会跟着变化;而内核空间有内核负责映射,它并不会跟着进程改变而改变,是固定的。内核空间地址有自己对应的页表,用户进程各自用不同的页表。每个进程用户空间都是完全独立、互不相干的。进程的虚拟内存地址空间如图所示:

    其中用户空间包括以下几个功能区域:
    • 只读段:包含程序代码(.init和.exit)和只读数据(.rodata)
    • 数据段:存放的是全局变量和静态变量。其中可读可写数据段(.data)存放已经初始化的全局变量和静态变量,BSS数据段(.bss)存放未初始化的全局变量和静态变量
    • 堆:由系统自动分配释放,存放函数的参数值、局部变量的值、返回地址等
    • 堆栈:存放动态分配的数据,一般由程序员动态分配和释放。若程序员不释放,程序结束时可能由操作系统回收。
    • 共享库的内存映射区域:这是Linux动态连接器和其他共享库代码的映射区域。
    由于在Linux系统中每一个进程都会有/proc文件系统下与之对应的一个目录(如将init进程的相关信息在/proc/1 目录下的文件中描述,1表示init进程的进程号),因此通过proc文件系统可以查看某个进程的地址空间的映射情况。
    测试代码:

    运行此程序:

    输入 size task

    text:存放的是代码     data:存放的是初始化过的全局变量或静态变量   bss:存放的是未初始化的全局变量或静态变量
    输入命令 cat /proc/3834/maps   其中3834是task的PID

    3、线程

    前面已经提到,进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程进程切换等操作时需要较复杂的上下文切换等动作。为了进一步减少处理机制的空转时间,支持多处理器及减少上下文切换开销,进程在演化中出现了另一个概念——线程。它是进程内独立的一条运行路线,是处理器调用的最小单元,也可以成为轻量级进程。线程可以对进程的内存空间和资源进程访问,并与同一个进程中的其他线程共享。因此,线程上下文切换的开销比创建进程小得多。
    一个进程可以拥有多个线程,每个线程必须有一个父进程。线程不拥有系统资源,它只具有运行所必需的一些数据,如堆栈、寄存器与线程控制块(TCB),线程与其父进程的其他线程共享该进程所拥有的全部资源。要注意的是,由线程共享了进程的资源和地址空间,因此,任何线程对系统资源的操作都会给其他线程带来影响。由此可知,多线程中的同步是非常重要的问题。在多线程系统中,进程与线程的关系如图所示:

    在Linux系统中,线程可以分为以下3种:
    用户级线程
    用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自己选择决定,在运行时不需要特定的内核支持。在这里,操作系统往往会提供一个用户空间的线程库,该线程库提供了线程的创建、调度和撤销等功能,而内核仍然仅对进程进行管理。如果一个进程中的某一个线程调用了一个阻塞的系统调用函数,那么该进程好吧该进程中的其他所有线程也同时被阻塞。这种用户级线程的主要缺点是在一个进程的多个线程的调度中无法发挥多处理器的优势。
    轻量级进程
    轻量级进程是内核支持的用户线程,是内核线程的一种抽象对象。每个线程拥有一个或多个轻量级进程,而每个轻量级进程分别被绑定在一个内核线程上。
    内核线程
    内核线程允许不同进程中的线程按照同一相对优先调度方法进行调度,这样就可以发挥多处理器的并发优势。现在大多数系统都采用用户级线程与核心级线程并存的方法。一个用户级线程可以对应一个或几个核心级线程,也就是“一对一”或“多对一”模型。这样既可以满足多处理系统的需要,也可以最大限度地减少调度开销。
    使用线程机制大大加快了上下文切换速度,而节省了很多资源。但是因为在用户态和内核态均要实现调度管理,所有会增加实现的复杂度和引起优先级翻转的可能性。同时,一个多线程程序的同步设计与调试也会增加程序实现的难道。
    展开全文
  • Linux 是一个多用户、多任务的操作系统,我们应该了解单用户多任务和多用户多任务的概念。单用户多任务:比如我们以beinan 登录系统,进入系统后,我要打开gedit 来写文档,但在写文档的过程中,我感觉少点音乐,...

    Linux 是一个多用户、多任务的操作系统,我们应该了解单用户多任务和多用户多任务的概念。

    单用户多任务:

    比如我们以beinan 登录系统,进入系统后,我要打开gedit 来写文档,但在写文档的过程中,我感觉少点音乐,所以又打开xmms 来点音乐;当然听点音乐还不行,MSN 还得打开,想知道几个弟兄现在正在做什么,这样一样,我在用beinan 用户登录时,执行了gedit 、xmms以及msn等,当然还有输入法fcitx ;这样说来就有点简单了,一个beinan用户,为了完成工作,执行了几个任务;当然beinan这个用户,其它的人还能以远程登录过来,也能做其它的工作。

    多用户多任务:

    有时可能是很多用户同时用同一个系统,但并不所有的用户都一定都要做同一件事,所以这就有多用户多任务之说。

    举个例子,比如LinuxSir.Org 服务器,上面有FTP 用户、系统管理员、web 用户、常规普通用户等,在同一时刻,可能有的弟兄正在访问论坛;有的可能在上传软件包管理子站,比如luma 或Yuking 兄在管理他们的主页系统和FTP ;在与此同时,可能还会有系统管理员在维护系统;浏览主页的用的是nobody 用户,大家都用同一个,而上传软件包用的是FTP用户;管理员的对系统的维护或查看,可能用的是普通帐号或超级权限root帐号;不同用户所具有的权限也不同,要完成不同的任务得需要不同的用户,也可以说不同的用户,可能完成的工作也不一样。

    值得注意的是:多用户多任务并不是大家同时挤到一接在一台机器的的键盘和显示器前来操作机器,多用户可能通过远程登录来进行,比如对服务器的远程控制,只要有用户权限任何人都是可以上去操作或访问的。

    用户的角色区分:

    用户在系统中是分角色的,在Linux 系统中,由于角色不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID 唯一的特性;

    root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;

    虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;

    普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;

    多用户操作系统的安全:

    多用户系统从事实来说对系统管理更为方便。从安全角度来说,多用户管理的系统更为安全,比如beinan用户下的某个文件不想让其它用户看到,只是设置一下文件的权限,只有beinan一个用户可读可写可编辑就行了,这样一来只有beinan一个用户可以对其私有文件进行操作,Linux 在多用户下表现最佳,Linux能很好的保护每个用户的安全,但我们也得学会Linux 才是,再安全的系统,如果没有安全意识的管理员或管理技术,这样的系统也不是安全的。

    从服务器角度来说,多用户的下的系统安全性也是最为重要的,我们常用的Windows 操作系统,它在系纺权限管理的能力只能说是一般般,根本没有没有办法和Linux或Unix 类系统相比;

    用户(user)的概念:

    通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;

    当然用户(user)的概念理解还不仅仅于此,在Linux系统中还有一些用户是用来完成特定任务的,比如nobody和ftp 等,我们访问LinuxSir.Org 的网页程序,就是nobody用户;我们匿名访问ftp 时,会用到用户ftp或nobody ;如果您想了解Linux系统的一些帐号,请查看 /etc/passwd ;

    用户组(group)的概念:

    用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;

    举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的;

    用户和用户组的对应关系是:一对一、多对一、一对多或多对多;
    一对一:某个用户可以是某个组的唯一成员;
    多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组;
    一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;

    多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条,这条也能理解;

    参考:http://www.jb51.net/LINUXjishu/134575.html

    展开全文
  • 多任务深度学习

    千次阅读 2016-10-21 16:24:09
    首发于 深度学习大讲堂 关注专栏 登录 写文章 ...一箭N雕:多任务深度学习实战 ...1、多任务学习导引 ...多任务学习是机器学习中的一个分支,按1997年综述论文Multi-task Learn

    一箭N雕:多任务深度学习实战

    深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏!



    1、多任务学习导引

    多任务学习是机器学习中的一个分支,按1997年综述论文Multi-task Learning一文的定义:Multitask Learning (MTL) is an inductive transfer mechanism whose principle goal is to improve generalization performance. MTL improves generalization by leveraging the domain-specific information contained in the training signals of related tasks. It does this by training tasks in parallel while using a shared representation。翻译成中文:多任务学习是一种归纳迁移机制,基本目标是提高泛化性能。多任务学习通过相关任务训练信号中的领域特定信息来提高泛化能力,利用共享表示采用并行训练的方法学习多个任务。

    顾名思义,多任务学习是一种同时学习多个任务的机器学习方法,如图1所示,多任务学习同时学习了人类和狗的分类器以及男性和女性的性别分类器。

    进一步的,图2所示为单任务学习和多任务学习的对比。在单任务学习中,每个任务采用单独的数据源,分别学习每个任务单独的模型。而多任务学习中,多个数据源采用共享表示同时学习多个子任务模型。

    多任务学习的基本假设是多个任务之间具有相关性,因此能够利用任务之间的相关性互相促进。例如,属性分类中,抹口红和戴耳环有一定的相关性,单独训练的时候是无法利用这些信息,多任务学习则可以利用任务相关性联合提高多个属性分类的精度,详情可参考文章Maryland大学Hand等人的论文Attributes for Improved Attributes: A Multi-Task Network for Attribute Classification。

    2、多任务深度学习

    近年来,在深度学习技术的推动下计算机视觉领域取得了突飞猛进的进展。本质上说,深度学习是多层的神经网络,对输入进行了层级的非线性表示,来自网络可视化的证据表明,深度网络的层级表示从语义上从底层到高层不断递进。深度网络强大的表示能力,使得多任务深度学习有了施展的空间。图3所示为多任务深度网络结构示意图。Input x表示不同任务的输入数据,绿色部分表示不同任务之间共享的层,紫色表示每个任务特定的层,Task x表示不同任务对应的损失函数层。在多任务深度网络中,低层次语义信息的共享有助于减少计算量,同时共享表示层可以使得几个有共性的任务更好的结合相关性信息,任务特定层则可以单独建模任务特定的信息,实现共享信息和任务特定信息的统一。

    在深度网络中,多任务的语义信息还可以从不同的层次输出,例如GoogLeNet中的两个辅助损失层。另外一个例子比如衣服图像检索系统,颜色这类的信息可以从较浅层的时候就进行输出判断,而衣服的样式风格这类的信息,更接近高层语义,需要从更高的层次进行输出,这里的输出指的是每个任务对应的损失层的前一层。

    3、多任务深度学习应用案例

    目前,多任务深度学习已经广泛应用于人脸识别、细粒度车辆分类、面部关键点定位与属性分类等多个领域,以下讲介绍其中的代表性论文。

    3.1人脸识别网络 DeepID2

    香港中文大学汤晓鸥组发表在NIPS14的论文Deep Learning Face Representation by Joint Identification-Verification,提出了一种联合训练人脸确认损失和人脸分类损失的多任务人脸识别网络DeepID2,网络结构如下图所示:

    DeepID2中共有两个损失函数,分别为人脸分类损失函数,对应于Caffe中的SoftmaxLoss:

    另外一个是人脸确认损失函数,对应于Caffe中的Contrastive Loss:

    3.2细粒度车辆分类网络

    这里介绍一个比较有趣的将SoftmaxLoss和TripletLoss结合在一个网络中进行多任务训练的方法Embedding Label Structures for Fine-Grained Feature Representation,目前文章发表于arXiv。作者将这个网络用于细粒度车辆分类上,提醒注意的是为了计算Tiplet Loss,特征进行了L2范数归一操作,网络结构如下图所示:

    3.3物体检测网络Faster R-CNN

    在物体检测网络Faster R-CNN中也有多任务学习的应用。Faster R-CNN的网络结构如下图6所示,包含两个任务,分别为窗口回归和窗口分类,其中RPN模块的卷积层在两个任务之间共享。Faster R-CNN的最新版本支持整体端到端训练,可以同时检测多类物体,是目前最具代表性的目标检测框架,同时也是多任务深度学习的一个典型应用。

    3.4面部关键点定位与属性分类网络TCDCN

    面部关键点估计和头部姿态以及人脸属性(是否戴眼镜、是否微笑和性别)之间有着紧密的联系,香港中文大学汤晓鸥组发表于ECCV14的工作Facial Landmark Detection by Deep Multi-task Learning利用多任务学习方法联合进行人脸面部关键点定位和属性预测,网络结构如下图7所示。

    4、基于Caffe实现多任务学习的小样例

    本节在目前广泛使用的深度学习开源框架Caffe的基础上实现多任务深度学习算法所需的多维标签输入。默认的,Caffe中的Data层只支持单维标签,为了支持多维标签,首先修改Caffe中的convert_imageset.cpp以支持多标签:

    这样我们就有了多任务的深度学习的基础部分数据输入。为了向上兼容Caffe框架,本文摒弃了部分开源实现增加Data层标签维度选项并修改Data层代码的做法,直接使用两个Data层将数据读入,即分别读入数据和多维标签,接下来介绍对应的网络结构文件prototxt的修改,注意红色的注释部分。

    特别的,slice层对多维的标签进行了切分,为每个任务输出了单独的标签。

    另外一个值得讨论的是每个任务的权重设置,在本文实践中五个任务设置为等权重loss_weight:0.2。一般的,建议所有任务的权重值相加为1,如果这个数值不设置,可能会导致网络收敛不稳定,这是因为多任务学习中对不同任务的梯度进行累加,导致梯度过大,甚至可能引发参数溢出错误导致网络训练失败。

    本文的完整代码可在作者个人的github主页下载:

    CodeSnap/convert_multilabel.cpp at master · HolidayXue/CodeSnap · GitHub

    多任务损失函数层的网络结构示意图如下图所示:

    5. 总结

    本文回顾了多任务学习的基本概念,并讨论了多任务深度学习的基本思想和应用案例。最后以开源深度学习平台Caffe为例讨论了多任务深度学习的实现,并给出了开源代码。

    致谢

    本文在投稿之后经历了三轮修改,其中一轮公众号编辑部初审,一轮双盲评审大改和一轮单盲评审小修,两名审稿专家对原文进行了全面仔细的阅读,帮助作者修正了文章的若干理论表述,给出了建设性的提高可读性的修改意见。在此本文作者对全体审稿人表示感谢,并对深度学习大讲堂公众号编辑部耐心细致的审稿服务表示感谢。

    该文章属于“深度学习大讲堂”原创,如需要转载,请联系@果果是枚开心果

    作者简介:

    薛云峰,(HolidayXue (HolidayXue) · GitHub),主要从事视频图像算法的研究,就职于浙江捷尚视觉科技股份有限公司担任深度学习算法研究员。捷尚致力于视频大数据和视频监控智能化,现诚招业内算法和工程技术人才,招聘主页浙江捷尚视觉科技股份有限公司--安全服务运营商,联系邮箱:hr@icarevision.cn

    原文链接:一箭N雕:多任务深度学习实战

    欢迎大家关注我们的微信公众号,搜索微信名称:深度学习大讲堂

    深度学习(Deep Learning)

    xu shenghui黄盼华Chocobullet南大光辉Yinghong li 
    文章被以下专栏收录
    2 条评论
    写下你的评论
    推荐阅读
    • 【青年学者专栏】递归神经网络(Recurrent Neural Network)学习

      深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏!摘要递归神经网络(Recurrent Neural Netw… 查看全文

      发表于 深度学习大讲堂
    • 天津大学深度学习一线实战研讨班干货总结与资源下载

      深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏!摘要本文总结了2016年7月16、17日由天津… 查看全文

      发表于 深度学习大讲堂
    • 古装戏中那些“穿越”的植物

      近年来,“穿越”似乎成了古装戏中的流行桥段。生活在现代的主人公,在神奇的力量下回到了古代,凭借着自己的现代知识,一点点改变历史的面貌… 查看全文

    • 国产协作机器人的机遇与挑战

      协作机器人是当前工业机器人领域一个非常热门的研究方向,国际机器人大厂陆续推出了多款协作机器人产品,国内也有很多厂商已经或者准备进入这… 查看全文

      发表于 OnionBots
    展开全文
  • 合作型多任务和抢先式多任务

    千次阅读 2007-03-26 20:59:00
    合作型多任务(cooperative multitasking)允许执行多个任务,但分享CPU是程序(而非操作系统)的责任。如果有一个程序决定咬住CPU不放,其它程序就停摆了。抢先式多任务(preemptive multitasking)操作系统能够...
  • FreeRTOS是如何工作的--RTOS基本原理:多任务和调度作者:Gavin Lee 来源:upsdn.net 更新日期:2006-04-12 RTOS基本原理多任务调度上下文切换实时应用实时调度这一节提供一个关于实时和多任务概念的简介。...
  • 网络及多任务

    千次阅读 2012-01-01 16:17:42
    原文:苹果参考库“Network and Multitasking”多任务是iOS4的关键特性。多任务允许你的应用在后台运行及挂起。对系统来说这是好事,但对你的应用来说会严重干扰其网络任务的执行。本文解释了在网络应用中如何处理...
  • linux的多任务

    千次阅读 2010-02-09 22:24:00
    写过一篇关于linux多用户的文章,在提到多用户的时候,多任务的概念也是有必要提出的,实际上,多用户必然意味着多任务,每个用户起码一个任务。这么看来。多任务是比多用户更加基本的一个概念和特性了。 在计算机的...
  • 关于多任务的神话

    千次阅读 2014-02-18 08:46:30
    根据Weinberg的计算,哪怕只是在你的工作负荷中增加一个项目,也会严重地影响你的效率。你会损失20%的时间。当你增加第三个项目的时候,你有将近一半的时间浪费在任务切换上面。
  • Linux 系统同时可以支持个用户,...就像手机开了助手一样,同时登陆个 qq 账号,当硬件配置非常高时,每个用户还可以同时执行任务个线程同时工作,提高效率。用户是 Linux 优于其他操作系统的一大特点。
  • 多任务中 多线程和多进程的区别

    万次阅读 多人点赞 2019-04-26 14:22:22
    多任务中 多线程和多线程的区别
  • activiti 实例任务

    万次阅读 多人点赞 2016-04-25 09:15:18
    我们在使用activiti 工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们...
  • 51单片机多任务机制的实现策略

    千次阅读 2013-12-27 13:05:48
    多任务恰恰是现在操作系统的突出特点,将多任务机制引入51单片机系统,可以大大提高先有单片机系统的工作效率,满足多任务要求。 1 多任务机制在51单片机上的实现原理 多任务要求在同一时间内执行多个任
  • springboot之多任务并行+线程池处理

    万次阅读 多人点赞 2018-05-14 16:20:34
    最近项目中做到一个关于批量发短信的业务,如果用户量特别大的话,不能使用单线程去发短信,只能尝试着使用多任务来完成!我们的项目使用到了方式二,即Future的方案 Java 线程池 Java通过Executors提供四...
  • 工作任务管理表

    千次阅读 2018-07-27 23:48:33
    一个高效的工作任务管理表 工作中有很是事情需要处理,怎么把这些事情管理起来需要提高工作效率?这个表绝对能帮助到你。在我的资源中有下载 ...
  • 多任务的概念人们已经非常熟悉了,它是指用户可以在同一时间内运行多个应用程序。Linux就是一种支持多任务的操作系统,它支持多进程、多线程等多任务处理和任务之间的多种通信机制。 Linux下多任务机制的介绍 ...
  • keras多任务多loss回传的思考

    千次阅读 2018-12-21 15:48:52
    如果有一个多任务多loss的网络,那么在训练时,loss是如何工作的呢? 比如下面: model = Model(inputs = input, outputs = [y1, y2]) l1 = 0.5 l2 = 0.3 model.compile(loss = [loss1, loss2], loss_weights=[l1, ...
  • FreeRTOS的多任务处理

    千次阅读 2018-11-15 14:58:51
    1.FreeRTOS 多任务调度支持 时间片段,抢占式 和 和做式 任务侁先级可以在调度器启动后调用 vTaskPrioritySet() API 函数进行修改 任意数量的任务可以共享同一个优先级——以保证最大设计弹性。当然,如果需要...
  • 工作流workflow任务调度工具argo

    千次阅读 2019-02-28 17:36:52
    转载请注明出处:工作流workflow任务调度工具argo argo简介和原理 argo是一个基于 kubernetes CRD(自定义资源) 实现的一个 Workflow(工作流) 开源工具,基于 kubernetes 的调度能力实现了工作流的控制和任务的运行。 ...
  • 多任务学习(Multi-Task Learning)

    万次阅读 2018-10-23 10:45:27
     多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解...
  • jenkins修改任务工作目录

    千次阅读 2019-06-01 19:21:14
    配置Job的工作空间 Job->Configure->General->Advanced->Use custom workspace
  • 线程并发,我们往往采用线程池来管理并发的线程。但是,我们往往有这样的需要:要求在线程池中的任务都完成后才能执行后续的任务,或者需要任务都完成后释放资源或向数据库写入状态。这些都需要我们判断线程池的...
  • 什么是多任务?什么叫做进程?什么是线程?

    千次阅读 多人点赞 2017-01-24 09:27:57
    1、什么叫做多任务? IT系统,同时完成多项任务处理,这个同时指的是同一段时间内,而不是同一瞬时。 多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持...
  • 多任务进化优化算法(一)——多因子进化算法(MFEA)

    千次阅读 多人点赞 2019-10-25 19:09:21
    最近看了很多关于多任务优化的文章,觉得这是一个蛮有意思的方向,想把里面最经典的两个方法介绍给大家,今天先介绍第一个MFEA,这个方向有一个平台,这里面有原作者的代码及最新的出版物,感兴...
  • RTOS环境下多任务编程要点

    千次阅读 2014-04-05 17:39:53
    RTOS环境下多任务编程要点 一. 分析阶段 1. 需求分析,予以文档描述; 2. 一些初始化问题,探究需求分析中的关键点; 3. 解决时序问题,系统中算法的分析; 4. 决定使用RTOS,依赖于时间响应和任务数量;...
  • 嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中,可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂、对硬件要求较高、开发难度大...
  • ABB之多任务623-1Multitask选项应用

    万次阅读 2019-11-25 12:02:05
    1. 提问 有什么方法能够让两个...多任务是指在同一时间内执行多个任务,例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件。 3.进程的概念 一个正在运行的程序或者软件就是一个进程,它是操...
  • 多任务学习与深度学习

    千次阅读 2018-04-25 15:40:21
    多任务学习是机器学习的一个子领域,学习的目标是同事执行多个相关任务。比如,系统会同时执行学习两项任务,以便这两项任务都有助于别的任务的学习。这是模仿人类智能的一种方式,即人类如何同时执行多项任务。例如...
  • .NET多线程编程(1):多任务和多线程 在.NET多线程编程这个系列我们讲一起来探讨多线程编程的各个方面。首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一...
  • IOS程序后台运行及多任务

    千次阅读 2012-10-17 16:46:28
    ...多任务是iOS4的关键特性。多任务允许你的应用在后台运行及挂起。对系统来说这是好事,但对你的应用来说会严重干扰其网络任务的执行。本文解释了在网络应用中如何处理好多任务。 本文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,288,662
精华内容 515,464
关键字:

多任务工作