2026/1/10 14:43:57
网站建设
项目流程
筛网怎么做网站,如何自做网站,做海外房产最好的网站,网络推广公司运作batch#xff0c;从学习dos时#xff0c;就认识了这个单词#xff0c;它叫做批处理#xff01;现在我发现他与并行或多线程是有差别的#xff01;我们前头所有程序凡是用到batch#xff0c;均是如下操作#xff0c;比如batch3#xff1a;输入一张图片#xff0c;forwa…batch从学习dos时就认识了这个单词它叫做批处理现在我发现他与并行或多线程是有差别的我们前头所有程序凡是用到batch均是如下操作比如batch3输入一张图片forward一次backward一次再输入一张图片forward一次backward一次梯度累加第一次再输入一张图片forward一次backward一次梯度累加第二次好batch3了我们更新一次每层的权值在我们极简cnn上体现如下forbatch0batch3;batch){wcnn的偏差[1][0] E偏导zII * aI[0];//梯度累加3次wcnn的偏差[1][1] E偏导zII * aI[1];wcnn的偏差[1][2] E偏导zII * aI[2];wcnn的偏差[1][3]E偏导zII * aI[3];}————————————————forbatch0batch3;batch){//梯度累加3次wcnn的偏差[0][0] delta11*a0[0] delta12*a0[1] delta21*a0[3] delta22*a0[4];//0,1,3,4wcnn的偏差[0][1] delta11*a0[1] delta12*a0[2] delta21*a0[4] delta22*a0[5];//1,2,4,5wcnn的偏差[0][2] delta11*a0[3] delta12*a0[4] delta21*a0[6] delta22*a0[7];//3,4,6,7wcnn的偏差[0][3]delta11*a0[4] delta12*a0[5] delta21*a0[7] delta22*a0[8];//4,5,7,8}————————————————//0上面batch执行了三次但更新只执行一次//w1,第二层的一个卷积核for (int i 0; i 4; i)//卷积核执行更新一次{wcnn[1][i] wcnn[1][i] - 常数a * wcnn的偏差[1][i]/3;}//w0第一层的一个卷积核for (int i 0; i 4; i)//卷积核执行更新一次{wcnn[0][i] wcnn[0][i] - 常数a * wcnn的偏差[0][i]/3;}以上就是我们的批梯度下降法而多线程怎么做呢假定我们也开启三个线程每个线程处理一幅图片关键是这个线程动作是并发的如果说上面batch处理是一个人轮流做了3次而线程是3个人每个人做一次这就是多线程并发的好处人多力量大速度还快每个线程只做一次wcnn的偏差[1][0] E偏导zII * aI[0];//梯度累加3次wcnn的偏差[1][1] E偏导zII * aI[1];wcnn的偏差[1][2] E偏导zII * aI[2];wcnn的偏差[1][3]E偏导zII * aI[3];以及wcnn的偏差[0][0] delta11*a0[0] delta12*a0[1] delta21*a0[3] delta22*a0[4];//0,1,3,4wcnn的偏差[0][1] delta11*a0[1] delta12*a0[2] delta21*a0[4] delta22*a0[5];//1,2,4,5wcnn的偏差[0][2] delta11*a0[3] delta12*a0[4] delta21*a0[6] delta22*a0[7];//3,4,6,7wcnn的偏差[0][3]delta11*a0[4] delta12*a0[5] delta21*a0[7] delta22*a0[8];//4,5,7,8最后我们要判断线程结束了比如说if线程1执行完成线程2执行完成线程3执行完成1再执行for (int i 0; i 4; i)//卷积核执行更新一次{wcnn[1][i] wcnn[1][i] - 常数a * wcnn的偏差[1][i]/3;}//w0第一层的一个卷积核for (int i 0; i 4; i)//卷积核执行更新一次{wcnn[0][i] wcnn[0][i] - 常数a * wcnn的偏差[0][i]/3;}这样看来多线程会比批处理batch快很多比如开启10个线程时差别会更大以后我的程序会超这个方向改进