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

news2024/11/25 20:46:33

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.coloradmin.cn/o/2190486.html

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

相关文章

从零开始学cv-16:超像素图像分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、超像素图像分割简介二&#xff1a;SLIC超像素图像分割三&#xff1a;Seed超像素分割算法四 &#xff1a;LSC超像素分割 前言 在数字图像处理和计算机视觉领…

2、Redis数据安全性分析

文章目录 一、Redis性能压测脚本介绍二、Redis数据持久化机制详解1、整体介绍Redis的数据持久化机制2、RDB详解3、AOF详解4、混合持久化策略 三、Redis主从复制Replica机制详解**1、Replica是什么&#xff1f;有什么用&#xff1f;****2、如何配置Replica&#xff1f;****3、如…

【AI知识点】正态分布(高斯分布)和中心极限定理(CLT)

正态分布&#xff08;Normal Distribution&#xff09;和中心极限定理&#xff08;Central Limit Theorem, CLT&#xff09; 是统计学中非常重要的概念&#xff0c;它们广泛应用于概率论、数据分析、机器学习等领域。以下将详细解释这两个概念及其关系。 1. 正态分布&#xff…

【C++】入门基础介绍(上)C++的发展历史与命名空间

文章目录 1. 前言2. C发展历史2. 1 C版本更新特性一览2. 2 关于C23的一个小故事: 3. C的重要性3. 1 编程语言排行榜3. 2 C在工作领域中的应用 4. C学习建议和书籍推荐4. 1 C学习难度4. 2 学习书籍推荐 5. C的第一个程序6. 命名空间6. 1 namespace的价值6. 2 namespace的定义6. …

《CUDA编程》4.CUDA程序的错误检测

在编写CUDA程序时&#xff0c;有的错误在编译过程中被发现&#xff0c;称为编译错误&#xff0c;有的在运行时出现&#xff0c;称为运行时刻错误&#xff0c;本章讨论如何排查运行时刻错误 1 一个检测CUDA运行时错误的宏函数 1.1 编写错误检查宏函数 在《CUDA编程》3.简单CUD…

从0到1:培训机构排课小程序开发笔记一

业务调研 随着人们生活水平的提高&#xff0c;健康意识和学习需求日益增强&#xff0c;私教、健身和培训机构的市场需求迅速增长。高效的排课系统不仅可以提升机构的管理效率&#xff0c;还能提高学员的满意度。解决传统的排课方式存在的时间冲突、信息不对称、人工操作繁琐等…

51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器CO传感器蓝牙LED、蜂鸣器等模块构成。适用于家用天然气泄露报警器、煤气泄露报警器、无线报警等相似项目。 可实现功能: 1、LCD1602实时显示温度和煤气浓度 2、温度传感器DS18B20采集环境温度 3、CO传…

【Mybatis篇】Mybatis的关联映射详细代码带练 (多对多查询、Mybatis缓存机制)

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】,【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;一.关联映射概述 &#x1f6a…

【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑

0.前言 P-tuning v2的实验在网上一抓一大把&#xff0c;这里就说一下我在微调过程中遇到的有些bug&#xff0c;踩过的一些坑&#xff0c;在网上找了很久都没有一些好的解决方案&#xff0c;在这里记录一下。 1.下载预训练模型 在官方给出的教程中&#xff0c;并不需要预先将模…

【springboot】简易模块化开发项目整合Swagger2

接上一项目【springboot】简易模块化开发项目整合MyBatis-plus&#xff0c;进行拓展项目 1.新建模块 右键项目→New→Module&#xff0c;新建一个模块 父项目选择fast-demo&#xff0c;命名为fast-demo-config&#xff0c;用于存放所有配置项 添加后&#xff0c;项目结构如图…

X3U·可编程控制器的定位控制

FX3U可编程控制器的定位控制进行说明。 一、概要 FX3U可编程控制器可以向伺服电机、步进电机等输出脉冲信号&#xff0c;从而进行定位控制。 脉冲频率高的时候&#xff0c;电机转得快:脉冲数多的时候&#xff0c;电机转得多。用脉冲频率、脉冲数来设定定位对象…

Linux基本命令及vim应用实训练习

Linux基本命令及vim应用实训练习 1. 2. 3. 4. 5. 使用man cp找出

4 思科模拟器的介绍和使用

4 思科模拟器的介绍和使用 思科的IOS给我们提供了三大模式 设备开机后&#xff0c;进入的模式是【用户模式】 Router表示设备的名称 “>”表示用户模式 在用户模式输入"?" 可列出在用户模式可以使用的命令 第二种模式是特权模式,输入enable进入特权模式&…

RNN经典案例——构建人名分类器

RNN经典案例——人名分类器 一、数据处理1.1 去掉语言中的重音标记1.2 读取数据1.3 构建人名类别与人名对应关系字典1.4 将人名转换为对应的onehot张量 二、构建RNN模型2.1 构建传统RNN模型2.2 构建LSTM模型2.3 构建GRU模型 三、构建训练函数并进行训练3.1 从输出结果中获得指定…

字符和ACSII编码

1.字符和ASCII编码 C语言中char类型&#xff0c;专门用来创建字符变量&#xff0c;字符放在单引号中 char ch a ASCII码表 c官网&#xff0c;最全de c官网链接 数字字符0~9对应ASCII码十进制48~57 字符 大写字母A~Z对应ASCII码十进制65~90 字符 小写字母a~z对应ASCII码…

EtherCAT 转 EtherNet/IP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899协议转换通信网关 EtherCAT 转 EtherNet/IP GW系列型号 MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 协议转换网关&#xff0c;为用户提供两…

突发!Meta重磅发布Movie Gen入局视频生成赛道!

引言 Meta于2024年10月4日首次推出 Meta Movie Gen&#xff0c;号称是迄今为止最先进的媒体基础模型。Movie Gen 由 Meta 的 AI 研究团队开发&#xff0c;在一系列功能上获取最先进的效果&#xff0c;包括&#xff1a;文生视频、创建个性化视频、精准的视频编辑和音频创作。 …

递归--C语言

1 递归定义 函数自己调用自己的过程&#xff0c;称为递归。 2 递归的必要条件 1.必须要有终止条件。达到条件就停止递归&#xff0c;退出函数。2.每次调用自己都要越来越接近这个终止条件。 因此写函数的时候&#xff0c;也分两部分 第一部分&#xff1a;写终止条件&#x…

点击按钮提示气泡信息(Toast)

演示效果&#xff1a; 目录结构&#xff1a; activity_main.xml(布局文件)代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…

【第三版 系统集成项目管理工程师】第15章 组织保障

持续更新。。。。。。。。。。。。。。。 【第三版】第十五章 组织保障 15.1信息和文档管理15.1.1 信息和文档1.信息系统信息-P5462.信息系统文档-P546 15.1.2 信息(文档)管理规则和方法1.信息(文档)编制规范-P5472.信息(文档)定级保护-P5483.信息(文档)配置管理-P549练习 15.…