博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用java实现CNN的实战
阅读量:7003 次
发布时间:2019-06-27

本文共 1280 字,大约阅读时间需要 4 分钟。

使用java实现CNN的实战

1、要实现CNN,其中包括 卷积、池化(下采样)、分类器、优化方法、分类器、反向传播

2、可以使用一个三维数组来表示一张图片(通道、行、列)

3、卷积,卷积的方式有三种:valid,full,same,在CNN中我们用到了两种:前向传播时,使用valid,反向传播时使  

full:假设我们的图片大小为 resourceImage:4*4,卷积核大小为  kernelSize:2*2,

    1> 前向传播时,valid 卷积的得到的resultImage:3*3 (4-2+1=3,假设stride为 1,pad :0)

    

case "valid" :{    resultImage = new double[inputImage.length-kernel.length+1][inputImage[0].length-kernel[0].length+1];    for(int i=0;i

 

 

其中 copy2 为我自己定义的函数,指的是复制二维数组指定区域的元素到一个新的二维数组

      product 也是我自己定义的函数,作用是:两个相同大小的二维数组对应位置成绩求和;

     2> 反向传播时,使用 full , (前向传播时 resourceImage:4*4, kernelSize:2*2, resultImage 3*3)

         反向传播,resourceImage:3*3, kernelSize:2*2, resultImage 4*4

我们可以使用补零的方式,使resourceImage 3*3 ------> tempImage 5*5

        然后使用 valid 卷积方式, tempImage:4*4, kernelSize:2*2, resultImage 3*3

 

 

case "full":{    resultImage = new double[inputImage.length+inputImage[0].length-1][inputImage[0].length+kernel[0].length-1];    double [][] tempImage=new double[inputImage.length+kernel.length-1][inputImage[0].length+kernel[0].length-1];    for(int i=0;i

 

4、pooling 的方式有MAX ,Average , L1 等几种方式,在这里我只实现了,MAX 和 Average

     1> MAX 

 

case "MAX":{    for(int i=0;i

 

这里用到了一个自带的一维数组排序的方法,可以自动使数组从小到大排列

Arrays.sort(tempArray);

 

2> Average

 

 

case "Average":{    double sum=0; // represent the sum of the element in subsampling area    for(int i=0;i

 

 

转载地址:http://bhevl.baihongyu.com/

你可能感兴趣的文章
1126 code plan
查看>>
JavaScript正则表达式基础知识汇总
查看>>
用LINQ获取XML节点数据
查看>>
在类中使用Response.Redirect()方法
查看>>
谷歌修复了 FFmpeg 中上千个 bug
查看>>
CSS3 用户界面
查看>>
SET TEXTSIZE number
查看>>
实现一个简单的视频聊天室(源码)
查看>>
白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连续7-电话问卷调查...
查看>>
Oracle 时间相减得出毫秒、秒、分、时、天,,【转】
查看>>
关于消息队列的使用
查看>>
IOS-Storyboard全解析-第二部分
查看>>
WEKA,一个开源java的数据挖掘工具
查看>>
Linux 查看设置系统语言
查看>>
阿里云物联网平台体验(NetGadgeteer+C#篇)
查看>>
mongdb开始标记
查看>>
linux内核源码结构
查看>>
CCM加密学习
查看>>
ZigBee profile
查看>>
127.0.0.1\SQLEXPRESS连接异常
查看>>