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 double12 \* 12; double\[\] A2 = new double12 \* 12; double\[\] A3 = new double12 \* 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 = xIn0 - 1 - ww + 2 * xIn0 - ww + xIn0 - ww + 1

  • xIn0 + ww - 1 - 2 * xIn0 + ww - xIn0 + ww + 1;

A1k = Grady;

double Gradx = xIn0 - ww + 1 + 2 * xIn0 + 1 + xIn0 + ww + 1

  • xIn0 - ww - 1 - 2 * xIn0 - 1 - xIn0 + ww - 1;

A2k = Gradx;

double lapulas = xIn0 + 1 + xIn0 - 1 - 2 * xIn0 + xIn0 + w + xIn0 - w - 2 * xIn0;//拉普拉斯=+

A3k = 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 (A1kk > tempb)

{

tempb = A1kk;

}

}

hebing固定.Add(tempb);

// hIcnnl = 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 (A2kk > tempb)

{

tempb = A2kk;

}

}

hebing固定.Add(tempb);

// hIcnnl = 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 (A3kk > tempb)

{

tempb = A3kk;

}

}

hebing固定.Add(tempb);

// hIcnnl = 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 double108;

for (int i = 0; i < hebing固定.Count; i++)

{

hebing固定归一化i=hebing固定i / linshimax;

}

hI固定 = new double80;

//通过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 double10;

//通过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 double10;

for (int j = 0; j < 10; j++)//10

{

deltaxj = (yO固定j - dj) * dsigmoid(yO固定j);

by固定j -= deltaxj * learnRate;

for (int i = 0; i < 80; i++)//

{

w2固定i, j -= deltaxj * learnRate * hO固定i;

}

}

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

double\[\] W2 = new double80;//

for (int j = 0; j < 80; j++)

for (int k = 0; k < 10; k++)

W2j += deltaxk * w2固定j, k;

//对w1进行更新

for (int j = 0; j < 80; j++)

{

double delta = dsigmoid(hO固定j) * W2j;

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。

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

相关推荐
逸模2 小时前
告别熬夜手工整理台账,逸模智能归集实现项目数据自动化存档
大数据·运维·人工智能·笔记·其他·信息可视化·自动化
weixin_397574092 小时前
生产管理和设备管理:制造执行层的AI痛点
人工智能·制造
冬奇Lab2 小时前
Agent 系列(16):工具链设计——让 LLM 用对工具的五个原则
人工智能·llm·agent
冬奇Lab3 小时前
每日一个开源项目(第125篇):taste-skill - 给 AI 装上审美,让前端不再千篇一律
人工智能·开源·agent
Ajie'Blog3 小时前
Copilot Agent Tasks API 开放:AI 编程开始进入后台任务时代
服务器·前端·javascript·人工智能·copilot·ai编程
SEONIB_Explorer3 小时前
AI SEO 与传统SEO成本对比:哪种更划算?
人工智能
一次旅行3 小时前
AI领域每日资讯报告
人工智能
Python私教3 小时前
Cursor + Claude Code 全流程实战:搭一套生产级 AI 编程工作流(2026 最新版)
人工智能·语言模型·qwen·ollama·本地大模型·大模型部署·deepseek
来让爷抱一个3 小时前
MonkeyCode 的 Git 协作功能:团队开发新范式
人工智能·ai编程