使用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. 如何正确的在Android中存储特定应用文件

    原文地址:How to Correctly Store App-Specific Files in Android Christophe Versieux (Waza_be)发表了一篇rant abo ...

  2. 使用web-component搭建企业级组件库

    组件库的现状 前端目前比较主流的框架有react,vuejs,angular等. 我们通常去搭建组件库的时候都是基于某一种框架去搭建,比如ant-design是基于react搭建的UI组件库,而ele ...

  3. python 匹配集合与补集

  4. .Net Core 认证系统之Cookie认证源码解析

    接着上文.Net Core 认证系统源码解析,Cookie认证算是常用的认证模式,但是目前主流都是前后端分离,有点鸡肋但是,不考虑移动端的站点或者纯管理后台网站可以使用这种认证方式.注意:基于浏览器且 ...

  5. 学习python所需要了解的一些基础计算机知识汇总

    1)编程语言 语言是一个物体与另一个物体交流的介质,而编程语言就是程序员与计算机沟通的介质,人使用编程语言的目的就是控制计算机为人服务. 例如,用户使用用python语言编写的应用程序通过操作系统向C ...

  6. Kubernetes1.3新特性:支持GPU

    (一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫" ...

  7. 使用 VSCODE 在 Windows 10 WSL 中远程开发

    使用 VSCODE 在 Windows 10 WSL 中远程开发 安装 VSCODE 1.35+ 版本. 在 VSCODE 中安装 WSL 插件. 点击左下角的 WSL 图标. 打开项目,提示路径. ...

  8. 从入侵到变现——“黑洞”下的黑帽SEO分析

    概述 由于互联网入口流量主要被搜索引擎占据,网站在搜索引擎中的排名直接影响到市场营销效果,因此SEO服务应运而生.SEO(Search Engine Optimization)全称为搜索引擎优化,是指 ...

  9. Ubuntu matplotlib显示中文乱码的解决方法

    https://blog.csdn.net/huuinn/article/details/78968966

  10. jmter正则表达式提取器

    1.若返回的body内容为空,仅有 header值,则: \s代表为空 2.使用Debug来调试