使用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. Java项目压力测试(待补)

    JVM监控使用ava自带jvisualvm,在java安装目录jdk1.*/bin下(有很多更高级的东西 线程2000以下,太多切换太消耗.CPU使用率30%以下,更健壮

  2. 洛谷P1316 P1824

    P1316 丢瓶盖 题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以 ...

  3. golang中特殊的标识符

    你会发现在 Go 代码中的几乎所有东西都有一个名称或标识符.另外,Go 语言也是区分大小写的,这与 C 家族中的其它语言相同.有效的标识符必须以字符(可以使用任何 UTF-8 编码的字符或 _)开头, ...

  4. Amazon Redshift数据迁移到MaxCompute

    Amazon Redshift数据迁移到MaxCompute Amazon Redshift 中的数据迁移到MaxCompute中经常需要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务Ma ...

  5. SPSS统计基础-均值功能的使用

    SPSS统计基础-均值功能的使用 均值过程计算一个或多个自变量类别中因变量的子组均值和相关的单变量统计.您也可以获得单因素方差分析.eta 和线性相关检验. 统计量.合计.个案数.均值.中位数.组内中 ...

  6. java通过实体类组装报文

    条件: 1.实体类字段名 首字母小写(java规范),再通过报文的需求,填充的时候做对应修改即可(正常报文首字母是大写的)! 2.假如xml标签首字母是小写,那么实体类就给大写,首字母是大写,那么实体 ...

  7. nginx+tomcat集群+redis(memcache)session共享!

    常用保持session的方式: 1.一些代理(比如nginxIP_hash) 1.使用数据库来存储Session 2.使用Cookie来存储Session                       ...

  8. Directx11教程(21) 修正程序最小化异常bug

    原文:Directx11教程(21) 修正程序最小化异常bug       很长时间竟然没有注意到,窗口最小化时候,程序会异常,今天调试水面程序时,随意间最小化了窗口,发现程序异常了.经过调试,原来程 ...

  9. bzoj1911 特别行动队

    Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9       斜率优化 推式子 #include< ...

  10. HTML/CSS学习之 三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化

    第一种方法:绝对定位 <!DOCTYPE html> <html> <head> <title>三列布局</title> <link ...