使用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<inputImage.length-kernel.length+1;i++)
{
for(int j=0;j<inputImage[0].length-kernel[0].length+1;j++)
{
int[] row={i,i+kernel.length-1};
int[] col={j,j+kernel[0].length-1};
double [][] regionImage= arroperation.copy2(inputImage,row,col);
resultImage[i][j]=arroperation.product(regionImage,kernel);
}
}
break;
}

其中 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<inputImage.length+2*kernel.length-2;i++)
{
for (int j=0;j<inputImage[0].length+2*kernel[0].length-2;j++)
{
tempImage[i][j]=0;
}
}
for(int i=0;i<inputImage.length;i++)
{
for(int j=0;j<inputImage[0].length;j++)
{
tempImage[i+kernel.length-1][j+kernel[0].length-1]=inputImage[i][j];
}
}
resultImage = convolutional(tempImage,kernel,"valid");
}

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

1> MAX

case "MAX":
{
for(int i=0;i<resultImage.length;i++)
{
for(int j=0;j<resultImage[0].length;j++)
{
int num=0;
for(int m=0;m<poolingSize[0];m++)
{
for(int n=0;n<poolingSize[1];n++)
{
tempArray[num]=resourceImage[i*poolingSize[0]+m][j*poolingSize[0]+n];
num=num+1;
}
}
Arrays.sort(tempArray);
resultImage[i][j]=tempArray[tempArray.length-1]; }
}
}
break;

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

Arrays.sort(tempArray);

2> Average

case "Average":
{
double sum=0; // represent the sum of the element in subsampling area
for(int i=0;i<resultImage.length;i++)
{
for(int j=0;j<resultImage[0].length;j++)
{
for(int m=0;m<poolingSize[0];m++)
{
for(int n=0;n<poolingSize[1];n++)
{
sum=sum+resourceImage[i*poolingSize[0]+m][j*poolingSize[0]+n];
}
}
resultImage[i][j]=sum/poolingSize[0]*poolingSize[1]; }
}
}
break;

使用java实现CNN的实战的更多相关文章

  1. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

  2. [Java聊天室server]实战之二 监听类

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  3. [Java聊天室server]实战之五 读写循环(服务端)

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  4. java设计模式综合项目实战视频教程

    java设计模式综合项目实战视频教程 视频课程目录如下: 第01节课:本课程整体内容介绍:X-gen系统概况,包括:引入.X-gen项目背景.X-gen的HelloWorld第02节课:X-gen整体 ...

  5. 轻量级JAVA+EE企业应用实战(第4版)pdf电子书和源码的免费下载链接

    轻量级JAVA+EE企业应用实战(第4版)pdf电子书和源码的免费下载链接: pdf链接:https://pan.baidu.com/s/1dYIWtsv2haL4v7vx3w-8WQ 无提取密码源码 ...

  6. Java工程师之Redis实战系列教程前言&目录

    系列前言 Java工程师之Redis实战系列教程,同其他教程一样,均是在下学习笔记,本系列主要参考自<Redis-in-action>,将书本中的有趣的例子转化为能解决特定问题的示例程序, ...

  7. java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可!

    java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可! 通过 云寻觅 javacallcsharp 生成器 自动生成java jni类库,  ...

  8. Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观

    Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  ...

  9. 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询

    在我的上一篇博客<[java]itoo项目实战之hibernate 懒载入优化性能>中,我曾提到过学生数据有2万条,查询数据十分的慢,这是让人非常受不了的事情.看着页面进度条一直转着圈圈, ...

随机推荐

  1. Node环境变量 process.env 的那些事儿

    前言 这两天在和运维GG搞部署项目的事儿. 碰到一个问题就是,咱们的dev,uat,product环境的问题. 因为是前后端分离,所以在开发和部署的过程中会有对后端接口的域名的切换问题.折腾了一下午, ...

  2. Leetcode836.Rectangle Overlap矩阵重叠

    矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的是,只在角或边接触的 ...

  3. python中几种单例模式的实现

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  4. scroll 滚动到指定位置触发事件 and 点击一按钮/链接让页面定位在指定的位置

    scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s&g ...

  5. ajax请求与form表单提交共存的时候status为canceled

    chrome浏览器调试,发现,status竟然是canceled状态 网上总论: 1.在URL变更后,会对当前正在执行的ajax进求进行中止操作.中止后该请求的状态码将为canceled 2.在使用到 ...

  6. python 定义子类

  7. iphone开发中使用nib(xib)文件的内存管理

    iphoneuinavigationcontrollercocoauiviewvariableswindows 在使用nib文件做界面开发的过程中,加载nib文件后,由于设置了outlet和deleg ...

  8. hdu1527 威佐夫博奕

    有2堆石子,有2个人,每个人可以从一堆取或从2堆取一样的个数的石子,至少取1个.问先手的是胜或输.设(ak,bk)我么成为局势. (0,0)(1,2)(3,5)(4,7)..这种先手必输的叫奇异局势. ...

  9. DirectX11 With Windows SDK--11 混合状态

    原文:DirectX11 With Windows SDK--11 混合状态 前言 这一章会着重讲述混合状态,在下一章则会讲述深度/模板状态 DirectX11 With Windows SDK完整目 ...

  10. framework7日期插件使用

    1.引入框架文件 <link rel="stylesheet" href="framework7.ios.min.css"> <link re ...