当前位置: 首页 > news >正文

卷积神经网络(cnn,类似lenet-1,八)

我们第一层用卷积核,前面已经成功,现在我们用两层卷积核:

结构如下,是不是很想lenet-1,其实我们24年就实现了sigmoid版本的:

cnn突破九(我们的五层卷积核bpnet网络就是lenet-1)-CSDN博客

28*28*4-》24*24*4-》12*12*4-》8*8*16-》4*4*16-》80-》10

我们28*28到24*24使用4个卷积核。

12*12到8*8使用16个卷积核。

还是那句话,权重参数w就是卷积核,卷积核就是权重w!

我们现在要全部改成relu版本!

那时我们是sigmoid实现,平均分93分,就打住了!

这次改的过程中才发现一个错误!

这里边我们的公式如下:

我们令B=\sum_{k=0}^{9}(yo[k]-d[k])*ds(yo[k])*w2【m,k】*ds(h2o[m])*w12【j,m】*ds(hocnn[j])

\frac{\partial E}{\partial w784[i]}=B*\frac{\partial hicnn[]}{\partial hxo[]}*\frac{\partial hxo[]}{\partial hxi[]}*\frac{\partial hxi[]}{\partial w784[i]}

=B*w1cnn[25]*ds(hxo[])*x[i]

\sum_{k=0}^{9}(yo[k]-d[k])*ds(yo[k])*w2【m,k】*ds(h2o[m])*w12【j,m】*ds(hocnn[j])*w1cnn[25]*ds(hxo[])*x[i]

其实公式是没有问题的,问题出在程序中,第一次卷积中,forward方向少了sigmoid!

back方向上,却做了sigmoid求导!

奇怪了,这么大的问题,为什么还能得分93?

也就是说反向更新搞错,也没影响?这个问题还是值得研究一下的!

但是再往上走,可能性变为0.训练12万次也不行,当时也不知道,就认了!

当初这个在我期望中,就放下了!

直到这一次才发现!

代码中关键在forward中这个地方遗忘了:(特别用遗忘二字标出来)

     for (int i = 0; i < 144; i++)
            {//NDrelu             
                hI遗忘[i] = NDrelu(hIcnnna[i] );
                hI遗忘1[i] = NDrelu(hIcnn1na[i] );
                hI遗忘2[i] = NDrelu(hIcnn2na[i] );
                hI遗忘3[i] = NDrelu(hIcnn3na[i] );             
            }

而back代码中有呼应如下:

 double[] deltacnnX = new double[16];//每一个deltacnnx,都对应25个28*28中的数据元素,以及一个5*5的卷积核
            
            for (int i = 0; i < 16; i++)//16              
                for (int j = 0; j < 25; j++)//25               
                {                
                    deltacnnX[i] = deltacnn[i] * w1cnn[j, 0];
                }//全连接还是好处理202409200708
            for (int i = 0; i < 16; i++)
            {//jilumnna
                Point temppt = 求二维(i, jilumnna[i].Y, jilumnna[i].X);
                for (int k = 0; k < 5; k++)
                    for (int z = 0; z < 5; z++)
                    {               
                        int newIndex = (temppt.Y + k) * 28+ (temppt.X + z);
                        int biasIndex=(temppt.Y / 2 + k) * 12 + temppt.X / 2 + z;
                        double delta = deltacnnX[i] * dNDrelu(hI遗忘[biasIndex]) * learnRate;//一共25个
                       // double delta = xI[newIndex] * deltacnnX[i] * dsigmoid(hIcnnna[(temppt.Y / 2 + k) * 12 + temppt.X / 2 + z]);
//一共25个
                  
                        w576cnn[k * 5 + z, 0] -= xI[newIndex] * delta ;//只用一个卷积核,核forward就对应上了202409181430
                    }
            }

前四个卷积核,后16个卷积核,一共20个。

20个卷积核cnn更改ok(类似lenet-1),平均96分,最好97.667

而遗憾的是老版本20个卷积核程序改挂了!使用sigmoid函数!

三个cnn版本,sigmoid版本应该可以改成功!

难度大的都搞定,sigmoid应该问题不大!

有机会试一下真正lecun的lenet-1:

28*28*3(rgb)-》3*24*24-》3*12*12-》16*8*8-》16*4*4-》80-》10

刚好我有彩色相机,不必10个输出,1个就好,在机器视觉中试一试,也不需要什么数据集!

http://www.lryc.cn/news/544625.html

相关文章:

  • 【NLP 27、文本分类任务 —— 传统机器学习算法】
  • Go红队开发—并发编程
  • Oracle 导出所有表索引的创建语句
  • 使用Docker方式一键部署MySQL和Redis数据库详解
  • 2020年蓝桥杯Java B组第二场题目+部分个人解析
  • [深度学习] 大模型学习2-提示词工程指北
  • FPGA之硬件设计笔记-持续更新中
  • vue cli 与 vite的区别
  • 怎么在本地环境安装yarn包
  • 【大模型】AI 辅助编程操作实战使用详解
  • react18自定义hook实现
  • 一周学会Flask3 Python Web开发-Jinja2模板过滤器使用
  • 使用PDFMiner.six解析PDF数据
  • 本地svn
  • 金融支付行业技术侧重点
  • axios几种请求类型的格式
  • 二、IDE集成DeepSeek保姆级教学(使用篇)
  • 通过理解 sk_buff 深入掌握 Linux 内核自定义协议族的开发实现
  • Qt 自带颜色属性
  • Linux的文件与目录管理
  • 常用的 pip 命令
  • Vue 项目中配置代理的必要性与实现指南
  • 【QT】QLinearGradient 线性渐变类简单使用教程
  • 编程题 - 汽水瓶【JavaScript/Node.js解法】
  • 从 0 到 1:使用 Docker 部署个人博客系统
  • Python - Python操作Redis
  • Solidity 开发环境
  • js基础案例
  • Unity TMPro显示中文字体
  • 2025 GDC开发者先锋大会“人形机器人的开源之路”分论坛 | 圆桌会议:《开放协作:开源生态如何解锁人形机器人与具身智能的未来》(上篇)