news 2026/9/11 20:49:49

对比多线程与batch(在极简单cnn上操作)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对比多线程与batch(在极简单cnn上操作)

batch,从学习dos时,就认识了这个单词,它叫做批处理!

现在我发现他与并行或多线程是有差别的!

我们前头所有程序凡是用到batch,均是如下操作,比如batch=3:

输入一张图片,forward一次,backward一次

再输入一张图片,forward一次,backward一次,梯度累加第一次

再输入一张图片,forward一次,backward一次,梯度累加第二次

好batch=3了,我们更新一次每层的权值:

在我们极简cnn上体现如下:

for(batch=0;batch<3;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];

}
————————————————

for(batch=0;batch<3;batch++)

{//梯度累加3次

wcnn的偏差[0][0] += delta11*a0[0] + delta12*a0[1] + delta21*a0[3] + delta22*a0[4];//0,1,3,4
wcnn的偏差[0][1] += delta11*a0[1] + delta12*a0[2] + delta21*a0[4] + delta22*a0[5];//1,2,4,5
wcnn的偏差[0][2] += delta11*a0[3] + delta12*a0[4] + delta21*a0[6] + delta22*a0[7];//3,4,6,7
wcnn的偏差[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,4
wcnn的偏差[0][1] += delta11*a0[1] + delta12*a0[2] + delta21*a0[4] + delta22*a0[5];//1,2,4,5
wcnn的偏差[0][2] += delta11*a0[3] + delta12*a0[4] + delta21*a0[6] + delta22*a0[7];//3,4,6,7
wcnn的偏差[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个线程时,差别会更大!

以后,我的程序会超这个方向改进!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 19:55:05

自动化测试团队效率提升指南

在数字化转型加速的2025年&#xff0c;软件交付周期持续压缩&#xff0c;自动化测试已成为质量保障的核心环节。然而&#xff0c;许多测试团队正面临脚本维护成本高、环境稳定性差、技术债累积等效率瓶颈。本指南结合行业最佳实践&#xff0c;为测试从业者提供一套从工具链优化…

作者头像 李华
网站建设 2026/9/11 23:03:02

LobeChat能否通过等保测评?国内合规性达标

LobeChat能否通过等保测评&#xff1f;国内合规性达标 在人工智能加速渗透企业服务的今天&#xff0c;越来越多组织开始部署基于大语言模型&#xff08;LLM&#xff09;的智能助手系统。从客服问答到内部知识检索&#xff0c;这类应用正逐步承担起关键业务支持角色。然而&#…

作者头像 李华
网站建设 2026/9/11 15:15:34

paperzz AI 期刊论文功能实测:从 “标题输入” 到 “期刊适配提纲”,学术写作如何少走格式与逻辑的弯路?

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 期刊论文https://www.paperzz.cc/journalArticle 对于初涉期刊论文写作的研究者而言&#xff0c;最耗时的往往不是内容创作&#xff0c;而是 “摸准期刊的格式规范”“搭好符合学术逻辑的提纲”…

作者头像 李华
网站建设 2026/9/11 14:23:03

Linux系统安装nginx

一 确认安装的版本首先需要先确认服务器是什么系统什么版本以及架构&#xff0c;选择对应版本的nginx rpm1 查看系统cat /etc/os-release2 查看架构uname -m # 查看架构&#xff08;x86_64, arm, aarch64等&#xff09;二 手动根据rpm安装# 基本安装 rpm -ivh package.rpm…

作者头像 李华
网站建设 2026/9/12 14:52:58

Dify Docker部署与模型集成指南

Dify Docker部署与模型集成指南 在生成式 AI 浪潮席卷各行各业的今天&#xff0c;如何快速将大语言模型&#xff08;LLM&#xff09;能力落地为可用的应用系统&#xff0c;已成为开发者和企业共同关注的核心命题。传统开发模式中&#xff0c;从模型接入、提示工程到知识库构建…

作者头像 李华