精华内容
下载资源
问答
  • 池化层 pool

    千次阅读 2018-12-03 12:26:09
    池化层,可以降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。 最常见的形式是池化层使用尺寸 2×22 \times 22×2 的滤波器,以步长为 222 来对每个深度切片...

    池化层 pool

    池化层,可以降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。

    最常见的形式是池化层使用尺寸 2×22 \times 2 的滤波器,以步长为 22 来对每个深度切片进行降采样,将其中 75%75\% 的激活信息都丢掉。

    平均池化历史上比较常用,但是现在已经很少使用了,因为实践证明,最大池化(MAX操作)的效果比平均池化要好:

    2×22 \times 2 的最大池化:

    反向传播

    池化层中,max(x,y)max(x,y) 函数的反向传播可以简单理解为将梯度只沿最大的数回传。因此,在向前传播经过池化层的时候,通常会把池中最大元素的索引记录下来(有时这个也叫作道岔(switches)),这样在反向传播的时候梯度的路由就很高效。

    展开全文
  • JAVA池化技术

    2020-11-21 16:33:07
    程序的运行,本质:占用系统的资源 优化资源的使用 =》 池化技术 线程池、连接池、内存池、对象池。。。 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还我。 线程池好处: 降低资源的消耗 ...

    一句话概括:三大方法、7大参数、4种拒绝策略

    程序的运行,本质:占用系统的资源  优化资源的使用  =》 池化技术
    

    线程池、连接池、内存池、对象池。。。
    池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还我。

    线程池好处:

    1. 降低资源的消耗
    2. 提高响应的速度
    3. 方便管理

    线程复用、可以控制最大并发数、管理线程

    三大方法

    //固定线程数池
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    //单例线程池
    ExecutorService executorService1 = Executors.newSingleThreadExecutor();
    //缓存线程数池
    ExecutorService executorService2 = Executors.newCachedThreadPool();
    
    try {
        for (int i = 0; i < 10; i++) {
            executorService.execute(()->{
                System.out.println(Thread.currentThread().getName()+" ok");
            });
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        //线程池用完,程序结束,关闭线程池
        executorService1.shutdown();
    }
    

    7大参数

    //获取cpu核心
    System.out.println(Runtime.getRuntime().availableProcessors());
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
            2,// 核心线程数
            Runtime.getRuntime().availableProcessors(),// 最大核心线程数
            3,// 超时时间
            TimeUnit.SECONDS,// 超时单位
            new LinkedBlockingDeque<>(3),// 阻塞队列
            Executors.defaultThreadFactory(),// 默认线程工厂,不用动它
            new ThreadPoolExecutor.AbortPolicy() //线程池处理不过来就抛出异常(拒绝策略)
    );
    try {
        for (int i = 0; i < 20; i++) {
            threadPoolExecutor.execute(()->{
                System.out.println(Thread.currentThread().getName()+" ok");
            });
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        //线程池用完,程序结束,关闭线程池
        threadPoolExecutor.shutdown();
    }
    

    最大线程数怎么定义:

    1. cpu 密集型 :几核,就是几,可以保持cpu的效率最高
    2. io 密集型 :判断你程序中十分耗费io的线程

    4种拒绝策略

    /**
     *
     *  new ThreadPoolExecutor.AbortPolicy() 线程池处理不过来就抛出异常
     *  new ThreadPoolExecutor.CallerRunsPolicy() 哪来的去哪里
     *  new ThreadPoolExecutor.DiscardPolicy() 队列满了,丢掉任务,不会抛异常
     *  new ThreadPoolExecutor.DiscardOldestPolicy() 队列满了,尝试去和最早的竞争,也不会抛出异常
     *
     */
    
    展开全文
  • Java池化技术

    2020-07-01 10:24:14
    池化(pool)技术的本质是通过复用对象、连接等资源,减少创建对象/连接,降低垃圾回收(GC)的开销,适当使用池化相关技术能够显著提高系统效率,优化性能。 线程池 Java ThreadPoolExecutor 线程池通过减少频繁...

    写在前面
    在Java应用开发中经常会用到连接池、线程池等池化技术。池化(pool)技术的本质是通过复用对象、连接等资源,减少创建对象/连接,降低垃圾回收(GC)的开销,适当使用池化相关技术能够显著提高系统效率,优化性能。
    线程池

    • Java ThreadPoolExecutor
      线程池通过减少频繁创建和销毁线程来降低系统性能损耗。每一个线程会对应一个线程栈(Thread Stack),用于存储局部变量与操作信息,可通过JVM参数中 -Xss 来调整线程栈大小,同时通过线程池来控制可创建线程的数量。线程池一般和队列(work queue)配合工作,通过线程池限制处理并发任务的数量;然后使用队列做为缓冲,通过设置队列的深度,当任务数量超过队列深度时,采用相应的拒绝策略处理,保证系统的可用性。
    ThreadPoolExecutor构造方法
    public ThreadPoolExecutor(int corePoolSize, 
                              int maximumPoolSize, 
                              long keepAliveTime, 
                              TimeUnit unit, 
                              BlockingQueue<Runnable> workQueue, 
                              RejectedExecutionHandler handler) { 
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, 
             Executors.defaultThreadFactory(), handler); 
    

    参数解析
    corePoolSize:核心线程数量,是线程池维护的线程最小数量。它会一直存活,即使没有任务,线程池也会维护线程的最少数量。

    maximumPoolSize:线程池维护线程的最大数量。

    keepAliveTime: 线程池维护线程所允许的空闲时间,当线程空闲时间达到keepAliveTime,该线程会退出,直到线程数量等于corePoolSize。如果allowCoreThreadTimeout设置为true,则所有线程均会退出直到线程数量为0。

    unit:线程池维护线程所允许的空闲时间的单位、可选参数值为:TimeUnit中的几个静态属性:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。

    workQueue:线程池所使用的缓冲队列,包括有界堵塞队列ArrayBlockingQueue、链表阻塞队列LinkedBlockingQueue、无缓冲阻塞队列SynchronousQueue。

    handler:线程池中的数量大于maximumPoolSize,对拒绝任务的处理策略,包括Abort(直接抛出RejectExecutionException),Discard(按照LIFO丢弃)、DiscardOldest(按照LRU丢弃)、CallsRun(主线程执行),默认值ThreadPoolExecutor.AbortPolicy()。

    策略说明
    当一个任务通过execute(Runnable)方法欲添加到线程池时:

    如果当前线程池中的数量小于corePoolSize,并线程池处于Running状态,创建并添加的任务。
    如果当前线程池中的数量等于corePoolSize,并线程池处于Running状态,缓冲队列 workQueue未满,那么任务被放入缓冲队列、等待任务调度执行。
    如果当前线程池中的数量大于corePoolSize,缓冲队列workQueue已满,并且线程池中的数量小于maximumPoolSize,新提交任务会创建新线程执行任务。
    如果当前线程池中的数量大于corePoolSize,缓冲队列workQueue已满,并且线程池中的数量等于maximumPoolSize,新提交任务由Handler处理。
    当线程池中的线程大于corePoolSize时,多余线程空闲时间超过keepAliveTime时,会关闭这部分线程。

    建议显式设置队列深度
    使用Executor.newFixedThreadPool时,没有显式设置work queue队列大小(默认为Integer.MAX_VALUE),队列深度过大导致瞬间线程数量巨大;

    如果大量任务被缓存到LinkedBlockingQueue中等待线程执行,会导致垃圾回收(GC)消耗大,系统响应慢以及内存溢出(OOM);

    Tomcat ThreadPool(base on tomcat 8.5)

    tomcat的线程池相关配置支持Http Connector与Executor两种,下面分别说明。

    Http Connector
    参考:http://tomcat.apache.org/tomcat-8.5-doc/config/http.html

    Tomcat-Http-Connector
    <Connector port="8080" acceptCount="100" maxConnections="200" minSpareThreads="10" maxThreads="200" />
    

    主要参数解析
    acceptCount:请求等待队列大小。当Tomcat没有空闲线程处理连接请求时,新请求将被放入等待队列;当队列深度超过acceptCount后,新请求直接被拒绝,默认值为100。

    maxConnections:能够处理的最大并发连接数。当超过后会将新的连接放入等待队列,连接会等待并不会被处理。默认值根据Connector的类型会有区别,BIO为200,NIO、NIO2为10000,APR为8192。

    minSpareThreads:线程池最小连接数,即可维护的最小连接数,默认值为10。

    maxThreads:线程池最大连接数,当线程空闲一段时间后会释放,直到minSparethreads数量,默认值为200。

    配置建议
    Tomcat最大并发线程数石油maxConnections与maxThreads中较小的值决定。

    例如:

    并发请求200个,accessCount=100,maxConnections=50,maxThreads=100;

    则说明有50个线程处理50个并发连接,100个线程进入等待队列,其余50个请求被拒绝。
    Executor(org.apache.catalina.Executor)方式配置
    参考:http://tomcat.apache.org/tomcat-8.5-doc/config/executor.html

    Tomcat-Executor
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" daemon="true" minSpareThreads="25" maxThreads="200" maxIdleTime="60000" maxQueueSize="Integer.MAX_VALUE" prestartminSpareThreads="false" />
    <Connector port="8080" executor="tomcatThreadPool" executorTerminationTimeoutMills="5000"/>
    

    主要参数解析
    namePrefix:线程池创建的线程名称前缀。

    daemon:是否以守护进程方式运行,默认为true。

    minSpareThreads:线程池最小线程数,默认值为25。

    maxThreads:线程池最大连接数,默认值为200。

    maxIdleTime:空闲线程的存活时间,超过此时间线程将会被回收,默认值为60秒。

    maxQueueSize:任务队列深度,默认为Integer.MAX_VALUE。

    prestartminSpareThreads:是否在Tomcat启动时就在线程池中创建minSpareThreads个线程,默认值为false。

    executorTerminationTimeoutMills:在停止Executor时,等待请求处理线程终止的超时时间,默认值为5000毫秒(5秒)。

    配置建议
    maxQueueSize默认值为Integer.MAX_VALUE,在常规场景过大,建议通过压测合理调整此值;

    关注公众号一起探讨技术:码农翻身之道

    展开全文
  • 1.1卷积参数量计算 2、池化后输出尺寸大小 3、感受野的计算 鉴于网上资源比较混乱,而且笔试考的多,故作此总结。希望能帮到大家。 1、卷积后输出尺寸的大小 输入:L*L*D 卷积核: 大小size=F*F*d,滑动步长...

    目录

    1、卷积后输出尺寸的大小

    1.1卷积参数量计算

    2、池化后输出尺寸大小

    3、感受野的计算


    鉴于网上资源比较混乱,而且笔试考的多,故作此总结。希望能帮到大家。

    1、卷积后输出尺寸的大小

    输入:L*L*D

    卷积核: 大小size=F*F*d,滑动步长stride=S,0填充 0 padding=P

    输出:l*l*d

    则输出尺寸为:l=(L-F+2*P)/S+1

    1.1卷积参数量计算

    上面卷积后的参数大小为:(F*F+1)*d

    其中+1是偏置,每个通道都有。

    2、池化后输出尺寸大小

    输入:L*L*D

    池化参数: 大小size=F*F*d,滑动步长stride=S

    输出:l*l*d

    则输出尺寸为:l=(L-F)/S+1

    3、感受野的计算

    (1)原始输入的感受野为1,即RF_{i} =0

    (2)后面的层感受野,注意F_{i}为卷积或者池化的大小,s_{k}包含卷积和池化的步长,计算的时候,卷积和池化都要进行计算,而且是一个递归过程(即每后一层感受野都受到前面所有卷积层和池化层的影响),除了卷积和池化,其他层并不影响感受野大小。

    RF_{i} =RF_{i-1}+ \left [ (F_{i}-1)*\prod_{k=1}^{i-1}s_{k} \right ]

     

    展开全文
  • 1.池化技术 初始化的时候,先建立一些资源。根据相应的策略,使用时拿出来,不用时候再放入池中,减少使用过程中重复的创建和销毁,以达到性能提升的目的。 2.常见池 (1)线程池 初始化一些线程,在用户访问...
  • 池化运算:对信号进行“收集”并“总结”,类似水池收集水资源,因而得名池化层 “收集”:多变少 “总结”:选取最大值或平均值 nn.MaxPool2d 功能 对二维信号(图像)进行最大值池化 主要参数 kernel_size 池化核...
  • CNN网络结构——池化层和全连接层

    千次阅读 2020-08-10 19:36:01
    空间尺寸不变,卷积层的运算量会一直很大,非常消耗资源。 卷积网络结构最后是通过全连接层输出分值向量的,如果空间尺寸一直不变,则全连接层的权重数量会非常巨大,导致过拟合。 前面几层的卷积层的输出存
  • 全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播,所以说全连接神经网络可以存储非常多的参数,如果你给它的样本如果没有达到它的量级的时候,它可以轻轻松松把你给他的样本全部都记下来,这会...
  • 池化运算:对信号进行收集并总结,类似水池收集水资源,因而得名池化层 收集:多变少 总结:最大值/平均值 nn.MaxPool2d 功能:对二维信号(图像)进行最大值池化 主要参数: kernel_size: 池化核尺寸 stride:...
  • 池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。也就是说池化技术有两个优点:提前创建;重复利用。池化技术优点分析以 Java 中的对象创建来说,在对象创建时要经历以下步骤:根据 new ...
  • 网易云课堂资源 卷积网络总结 卷积网络举例 卷积神经网络例子(模型参数的选择可参考别人类似问题的参数设置) 卷积神经网络参数规律 池化总结 相同数据的输入输出,卷积网络相比全连接网络可大幅度减少...
  • 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完还给我 线程池的好处 1、降低资源的消耗 2、提高响应的速度 3、方便管理 线程复用、可以控制最大并发数、管理线程 11.1、线程池: 3大方法 先看一下阿里...
  • 1.线程池 线程池(英语:thread pool):一种线程使用模式。...池化技术:事先准备好一些资源,有人要用,就来池子里拿,用完之后还过来。 线程池的好处: 降低资源的浪费 提高响应的速度 方便管理。 3. 三大
  • 线程池(重点)一:线程池:三大方法,七大参数,四种拒绝策略 池化技术: 01:程序的运行,本质 :占用系统的资源!优化资源的使用!=>池化技术 02:线程池、连接池、内存池、对象池///......创建、销毁。十分...
  • 背景线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发的任务处理场景,线程池的使用是必不可少的。在双11主图价格表达项目中为了提升处理...
  • 背景线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发的任务处理场景,线程池的使用是必不可少的。在双11主图价格表达项目中为了提升处理...
  • 池化,也就是我们希望通过一个池化的方式来对连接进行把控。我们不希望同一时间连接过多,导致线程过多,占用资源过大。 这种感觉有点像JVM,我们不希望我们因为一些琐事而增加我们的开发成本。 2.正题 进入正题...
  • 十分浪费资源 03:池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。  线程池的好处: 01:降低资源的消耗 02:提高响应的速度 03:方便管理 (重点)线程复用、可以控制最大并发数...
  • 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我 程序的运行的本质 :占用系统的资源池化技术可以优化资源的使用 线程池、连接池、内存池、对象池///......创建、销毁十分浪费资源 ...
  • 线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发的任务处理场景,线程池的使用是必不可少的。随着线程池的使用,逐渐发现一个问题,线程池...
  • 线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发的任务处理场景,线程池的使用是必不可少的。在双11主图价格表达项目中为了提升处理性能,...
  • 池化技术:事先准备好一些资源,有人要用,就来这里拿,用完还回去 线程池的好处: 降低资源的消耗; 提高响应的速度; 方便线程管理。 总结:线程复用、可以控制大量并发数、管理线程 1. 三大方法 阿里巴巴...
  • 程序运行就是资源的占用,池化就是优化资源利用,线程池,连接池啥的,创建销毁很耗费时间空间,所以就提前准备好资源,你来那就行,用完换回来。 减少资源消耗,速度提升,还有或就是方便管理,线程复用,就像...
  • 背景线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发的任务处理场景,线程池的使用是必不可少的。在双11主图价格表达项目中为了提升处理...
  • 背景线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发的任务处理场景,线程池的使用是必不可少的。在双11主图价格表达项目中为了提升处理...
  • 池化技术通俗讲就是我事先准备好一些资源,有人需要用就可以来我这里借去使用,用完后再还回来就可以了,这样还回来的资源又可以让后面需要来借的人拿去使用。 线程池就是利用的池化技术,把多个线程维护在一个池子...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

参数资源池化