news 2026/5/9 5:22:23

对比多线程与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/5/5 18:55:13

乐迪信息:智慧煤矿解决方案:AI摄像机智能预警系统

AI摄像机智能预警系统为煤矿安全生产提供了全新的技术路径。该系统通过在煤矿关键区域部署智能摄像设备&#xff0c;结合AI算法实现对人员行为、设备状态及环境风险的实时识别与预警&#xff0c;有效提升了煤矿安全管理水平。一&#xff1a;系统架构与技术原理AI摄像机智能预警…

作者头像 李华
网站建设 2026/5/1 0:11:45

新教程!AI大模型部署核心:FastAPI从入门到实战!

AI风口正当时&#xff0c; 想从Python基础迈向高薪开发&#xff1f; 想在AI浪潮中手握核心部署能力&#xff1f; 黑马程序员《Python Web开发&#xff1a;FastAPI从入门到实战》全新教程&#xff0c;正式上线&#xff01;一套教程让你轻松掌握AI大模型部署核心技能&#xff…

作者头像 李华
网站建设 2026/5/6 17:09:31

告别“失忆“Agent:构建生产级AI系统的九大黄金法则

文章基于Old Dominion大学研究团队的最新论文&#xff0c;详细介绍了构建生产级Agentic AI工作流的九大黄金法则&#xff0c;包括工具调用优于MCP、直接函数优于Agent工具、单一职责原则等。通过完整的播客生成系统案例&#xff0c;展示了如何将理论转化为可落地的工程实践&…

作者头像 李华
网站建设 2026/5/6 7:30:08

当券商成立互联网分公司,面向长尾客户的“智能化总攻”开始了

近期&#xff0c;又一家头部券商宣布成立互联网分公司&#xff0c;在业内激起不小波澜。有人质疑这是“新瓶装旧酒”&#xff0c;但真正洞察行业演进的人会明白&#xff1a;这并非简单回归&#xff0c;而是一场面向AI时代客户经营体系的重构。 十年前&#xff0c;互联网分公司的…

作者头像 李华
网站建设 2026/5/4 13:12:10

13. 搜索引擎-ES-ES集群

文章目录前言一、搭建ES集群1.1 创建ES集群1.2 集群状态监控1.3创建索引库二、集群脑裂问题2.1.集群职责划分2.2.脑裂问题三、集群分布式存储3.1.分片存储测试3.2.分片存储原理四、集群分布式查询五、集群故障转移前言 ES集群‌ 一、搭建ES集群 1.1 创建ES集群 部署es集群可…

作者头像 李华
网站建设 2026/5/9 0:38:43

LobeChat能否接入实时翻译插件?多语言交流解决方案

LobeChat能否接入实时翻译插件&#xff1f;多语言交流解决方案 在跨国团队协作日益频繁的今天&#xff0c;一个中国工程师与德国同事讨论技术方案时&#xff0c;可能正依赖AI助手做实时沟通桥梁&#xff1b;一位留学生在查阅英文论文时&#xff0c;希望对话模型能直接用母语解释…

作者头像 李华