cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核,训练6万次,91分,再训练6万次,95分,不是很满意,但又找不到问题点,所以就想了个办法,使用三个固定核,加上三层bpnet神经网络,看看效果,还别说,固定核效果不错,训练6万次,逼近96分,而且不到十秒就训练完成了,而机器自动生成卷积核要40多秒!以下是代码,做个记录,为什么图像处理中常用的卷积核效果好?

14:24 2024/9/25
已经打包,已经改成100,变化不大
然后想到,用那三个卷积核,加上三层网络,
结果太开心,稳定在96三次,时而突破97,学习6万次一共四次
如果重复学习,已经有参数,不低于97
28*28gaos后降采样成14*14,使用三个卷积核并行,变成3@12*12,
降采样到3@6*6,108全连接80-10,结束
先打包一个,太激动le,95就这样突破了

这是当天的日记。代码如下:

先看forward函数:

forward第一步;使用soblex,sobely,以及lapulas三个核,14*14-》3@12*12

  int w = 14;
            int ww = w;
            int h = 14;
            int hh = h;
            double[] A1 = new double[12 * 12]; double[] A2 = new double[12 * 12]; double[] A3 = new double[12 * 12];
            int k = 0;
            for (int j = 1; j < (h - 1); j++)
            {
                for (int i = 1; i < (w - 1); i++)
                {
                    int n0 = (j * w + i);
                 
                    double Grady = xI[n0 - 1 - ww] + 2 * xI[n0 - ww] + xI[n0 - ww + 1]
                        - xI[n0 + ww - 1] - 2 * xI[n0 + ww] - xI[n0 + ww + 1];


                    A1[k] = Grady;

                    double Gradx = xI[n0 - ww + 1] + 2 * xI[n0 + 1] + xI[n0 + ww + 1]
                         - xI[n0 - ww - 1] - 2 * xI[n0 - 1] - xI[n0 + ww - 1];

                 
                    A2[k] = Gradx;


                    double lapulas = xI[n0 + 1] + xI[n0 - 1] - 2 * xI[n0] + xI[n0 + w] + xI[n0 - w] - 2 * xI[n0];//拉普拉斯=+

                   
                    A3[k] = lapulas;

                    k++;
                }
            }

forward第二步:池化取最大,变成6*6@3

  //第二步,降级采样
           // List<double>
                hebing固定 = new List<double>();//一共36*3
            for (int i = 0; i < 6; i++)
                for (int j = 0; j < 6; j++)//
                {
                    int l = (i) * 6 + j;
                    double tempb = 0;
                   
                    for (int m = 0; m < 2; m++)
                        for (int n = 0; n < 2; n++)
                        {
                            int kk = (i * 2 + m) * 12 + j * 2 + n;

                            if (A1[kk] > tempb)
                            {
                                tempb = A1[kk];
                             

                            }
                        }
                    hebing固定.Add(tempb);
                   // hIcnn[l] = tempb;//25个数据,通过这个关系,就能找到14*14matrix中去。202409181038
                }
            for (int i = 0; i < 6; i++)
                for (int j = 0; j < 6; j++)//
                {
                    int l = (i) * 6 + j;
                    double tempb = 0;

                    for (int m = 0; m < 2; m++)
                        for (int n = 0; n < 2; n++)
                        {
                            int kk = (i * 2 + m) * 12 + j * 2 + n;

                            if (A2[kk] > tempb)
                            {
                                tempb = A2[kk];


                            }
                        }
                    hebing固定.Add(tempb);
                    // hIcnn[l] = tempb;//25个数据,通过这个关系,就能找到14*14matrix中去。202409181038
                }
            for (int i = 0; i < 6; i++)
                for (int j = 0; j < 6; j++)//
                {
                    int l = (i) * 6 + j;
                    double tempb = 0;

                    for (int m = 0; m < 2; m++)
                        for (int n = 0; n < 2; n++)
                        {
                            int kk = (i * 2 + m) * 12 + j * 2 + n;

                            if (A3[kk] > tempb)
                            {
                                tempb = A3[kk];


                            }
                        }
                    hebing固定.Add(tempb);
                    // hIcnn[l] = tempb;//25个数据,通过这个关系,就能找到14*14matrix中去。202409181038
                }

forward第三步:合并3@6*6=108,归一化后全连接

  //先观察数据,并归一化hebing固定
       
            double linshimax=0;
            for (int i = 0; i < hebing固定.Count;i++ )
            {
             
                if (hebing固定[i] > linshimax) linshimax = hebing固定[i];
            }
            hebing固定归一化=new double[108];
            for (int i = 0; i < hebing固定.Count; i++)
            {
                hebing固定归一化[i]=hebing固定[i] / linshimax;
            }
          
            hI固定 = new double[80];
            //通过w1计算输入层-隐藏层输入节点 
            for (int i = 0; i < 36 * 3; i++)//108
                for (int j = 0; j < 80; j++)//80

                    hI固定[j] += hebing固定归一化[i] * w1固定[i, j];

            //通过激活函数对隐藏层进行计算 
            for (int i = 0; i < 80; i++)
                hO固定[i] = sigmoid(hI固定[i] + bh固定[i]);
         
            yi固定 = new double[10];
            //通过w2计算隐藏层-输出层
            for (int i = 0; i < 80; i++)
                for (int j = 0; j < 10; j++)

                    yi固定[j] += hO固定[i] * w2固定[i, j];

            //通过激活函数求yo
            for (int i = 0; i < 10; i++)
                yO固定[i] = sigmoid(yi固定[i] + by固定[i]);

以上就完成了forward函数,下面再看:backward函数:

   void backcnn固定()
        {
            //对w2进行更新 
          double []deltax=new double[10];

            for (int j = 0; j < 10; j++)//10
            {
                deltax[j] = (yO固定[j] - d[j]) * dsigmoid(yO固定[j]);
                by固定[j] -= deltax[j] * learnRate;
                for (int i = 0; i < 80; i++)//
                {

            
                    w2固定[i, j] -= deltax[j] * learnRate * hO固定[i];
                    
                }
            }

            //对反向传播进行预处理 

            double[] W2 = new double[80];//
       
            for (int j = 0; j < 80; j++)
                for (int k = 0; k < 10; k++)
                    W2[j] += deltax[k] * w2固定[j, k];

            //对w1进行更新

            for (int j = 0; j < 80; j++)
            {
                double delta = dsigmoid(hO固定[j]) * W2[j];
                bh固定[j] -= delta * learnRate;
                for (int i = 0; i < 108; i++)//
                {

                    w1固定[i, j] -= delta * learnRate * hebing固定归一化[i];
                   
                }
            }
           
        }

这就完了,看看运行效果:

然后再看那个自己生成四个卷积核的cnn,对比有什么感想:

14:31 2024/9/25
另外,降采样中取最大的提示,是否高斯后也如此操作,而不是各行各列降采样?
15:37 2024/9/25
已经尝试,效果不好

这是第一个直觉上的想法,并验证,不行,第二个直觉上的想法:

我们5*5的卷积核,都不是像图像处理中的卷积核,我们自己生成的卷积核都是针对第一像素的处理,而图像处理中的卷积核,都是针对中心像素卷积的,以为这个中心对齐有效果,求证后,没有质的提升!

找不出来为什么得分在91-95之间,我就认为,自己的程序当下没有问题!

在这个自生成卷积核cnn上,我想是不是层数太少导致的,所以,我扩展了结构:

28*28-》4@24*24-》4@12*12-》16@8*8-》16@4*4-》80-》10,使用了4个5*5卷积核,以及16个5*5卷积核,让网络自己生成,期间我只是吧步长learnrate由0.2降为0.07,

这个结构程序达成的得分仍然在91-95之间,仍然不如固定核一次就能训练到96分

虽然有点沮丧,但是,我发现,我的这个cnn架构,已经和lecun的lenet-1相当,

这才是最大的成功,别人花了那么多年的成果,就这样被我突破了!

其实,想一想,还有好几个法宝都没用上,以后有机会在推进一下!

然后,我把这个固定核bpnet移植到自己的机器视觉megauning中试了试,发现速度跟不上,

然后就放弃了!

说实话,这个不如我在形状匹配中引入角点的效果,虽然时间长了一点点,但时间在500ms内能搞定,而且得分由原来的37分的确定界限,翻一番都不止!

这个固定核bpnet改成匹配,时间接近2秒,而且用识别分类的方法来找(匹配)准确位置,效果不值一提!

但可以肯定的是,cnn是可以用来定位的,但很明显人工智能的cnn显然与机器视觉在应用场景上极大的不同!

这更增强了我对机器视觉的信心!ai在场景的落地上还需要时间,我觉得用人工智能判断疾病应该有极大的空间!

哎,又好长时间没有看中医了,ai应该和中医能很好的结合!这上面我是有信心的,中医识别和分类很像cnn。

总结:人眼中有识别和匹配,但识别和匹配不一样,匹配是拉着弓,百步穿杨,而识别是那是杨树叶,或者说,那是杨树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555270.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

双十一狂欢派对 五款市面上获得好评的好物

一年一度的双十一购物狂欢派对即将到来&#xff0c;这一天不仅是广大消费者的福利日&#xff0c;也是各大品牌展示实力的战场。随着市场的不断发展与消费者需求的多样化&#xff0c;双十一已经不仅仅是降价促销的代名词&#xff0c;更是品质与创新的竞技场。在琳琅满目的商品中…

产品经理产出的原型设计 - 需求文档应该怎么制作?

需求文档&#xff0c;产品经理最终产出的文档&#xff0c;也是产品设计最终的表述形式。本次分享呢&#xff0c;就是介绍如何写好一份需求文档。 所有元件均可复用&#xff0c;可作为管理端原型设计模板&#xff0c;按照实际项目需求进行功能拓展。有需要的话可分享源文件。 …

ChatGPT Canvas:交互式对话编辑器

自两年前 ChatGPT 发布以来&#xff0c;主流 AI 均以对话形式进行交互。传统的对话式界面可以直观看到反馈结果&#xff0c;但在需要深度编辑和协作的项目中就略显局限。为了解决此问题&#xff0c;几个月前 Claude 就发布过 Artifacts 功能&#xff0c;用来拓展原有对话。而现…

django华业社区电子政务管理系统-计算机毕业设计源码33448

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

【Java】Java面试题笔试

[赠送]面试视频指导简历面试题 Java面试笔试题题库华为 java笔试面试题2014.files 就业相关java 面试题 面试题库 视频笔记 java笔试题大集合及答案 java面试书籍源码 java算法大全源码包8张图解 java.docx25个经典的Spring面试问答.docx 25个经典的Spring面试问答.docx 100家大…

【hot100-java】【删除链表的倒数第 N 个结点】

链表篇 思路&#xff1a; 先走一遍记录链表长度 再走到对应的点&#xff0c;然后删除 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode…

【LLM】OpenAI o1模型和相关技术

Note OpenAI o1 模型中推理过程的工作原理 1、o1模型引入了reasoning tokens。这些token用于"思考"&#xff0c;帮助模型分解对提示的理解&#xff0c;并考虑生成回应的多种方法。2、在生成推理token后&#xff0c;模型会产生一个可见的完成token作为答案&#xff0…

Redis:zset类型

Redis&#xff1a;zset类型 zset命令ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZREVRANGEBYSCOREZPOPMAXBZPOPMAXZPOPMINBZPOPMINZRANKZREVRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBY 集合间操作ZINRERSTOREZUNIONSTORE 内部编码ziplistskiplist 在Redis中&…

【AIGC】ChatGPT提示词Prompt助力自媒体内容创作升级

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效仿写专家级文章提示词使用方法 &#x1f4af;CSDN博主账号分析提示词使用方法 &#x1f4af;自媒体爆款文案优化助手提示词使用方法 &#x1f4af;小结 &#x1f4af…

02基础篇:667的大题题型与应对策略

通过本节&#xff0c;你将学习到&#xff1a; 667分析题的考查方向与基本题型667分析题的两种解决策略 667分析题的三大基本题型 首先&#xff0c;通过回顾667科目分析题的真题&#xff08;2021-2024年&#xff09;&#xff0c;我根据题目特点将其归纳为三个主要类别。这样的…

【JavaWeb】javaweb目录结构简介【转】

以上图说明&#xff1a; bbs目录代表一个web应用bbs目录下的html,jsp文件可以直接被浏览器访问WEB-INF目录下的资源是不能直接被浏览器访问的web.xml文件是web程序的主要配置文件所有的classes文件都放在classes目录下jar文件放在lib目录下

Linux Cent7 已安装MySQL5.7.X,再安装MYSQL8.4.2

一、 下载安装 检查Linux系统的glibc版本rpm -qa | grep glibc结果&#xff1a;glibc-common-2.17-260.el7_6.6.x86_64 glibc-2.17-260.el7_6.6.x86_64 glibc-headers-2.17-260.el7_6.6.x86_64 glibc-devel-2.17-260.el7_6.6.x86_64访问MySQL官网&#xff0c;下载对应版本数据…

华为 HCIP-Datacom H12-821 题库 (32)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.当一个运行 MSTP 协议的交换设备端口收到一个配置BPDU 时&#xff0c;会与设备保存的全局配…

CF D. Minimize the Difference

原题链接&#xff1a;Problem - D - Codeforces 题意&#xff1a;给你长度为n的数组&#xff0c;可以无限次的让i位置的数-1&#xff0c;让i1的位置的数1。问最大值-最小值的最小值是多少&#xff1f; 思路&#xff1a;可以观察出&#xff0c;操作的真正意义是让i位置的数减少…

数字乡村智慧乡镇整体规划设计解决方案

1. 数字乡村的重要性 数字乡镇作为乡村振兴战略的一部分&#xff0c;通过信息化手段提高农业农村现代化水平&#xff0c;是建设数字中国的重要内容&#xff0c;对保障扶贫成果、促进乡村治理体系和治理能力现代化具有基础支撑作用。 2. 乡镇政府和农户面临的问题 乡镇政府和…

Linux 之 安装软件、GCC编译器、Linux 操作系统基础

安装软件、GCC编译器、Linux 操作系统基础 学习任务&#xff1a; 安装 Vmware虚拟机、掌握Ubuntu 系统的使用认识 Ubuntu 操作系统的终端和 Shell掌握软件安装、文件系统、掌握磁盘管理与解压缩掌握 VIM 编辑器、Makefile 基本语法熟悉 Linux 常见指令操作 安装好开发软件&…

电源管理芯片PMIC

一、简介 电源管理芯片&#xff08;Power Management Integrated Circuits&#xff0c;简称PMIC&#xff09;是一种集成电路&#xff0c;它的主要功能是在电子设备系统中对电能进行管理和控制&#xff0c;包括但不限于以下几点&#xff1a; 电压转换&#xff1a;将电源电压转换…

IndexTree、AC自动机

一、引言。 IndexTree和线段树有一些联系&#xff0c;这里我们再重新解释一下线段树用来解决什么样的一个问题&#xff0c;线段树解决的是一个区间查询和区间更新的一个问题&#xff0c;比如说我有一个数组在 L....R 上统一加上V&#xff0c;或者在L.....R上&#xff0c;统一所…

硬件设计-利用环路设计优化PLL的输出性能

目录 前言 问题描述 问题分析步骤 杂散源头排查 245.76M 参考相噪&#xff1a; 30.72M VCXO的相噪性能测试如下: 解决方案 前言 LMK04832是TI 新发布的低抖动双环去抖模拟时钟&#xff0c; 其最高输出频率可以到达3250MHz&#xff0c; 输出抖动极低&#xff0c;3200MHz…

Sentinel学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…