使用java实现CNN的实战
使用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的实战的更多相关文章
- 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- [Java聊天室server]实战之五 读写循环(服务端)
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- java设计模式综合项目实战视频教程
java设计模式综合项目实战视频教程 视频课程目录如下: 第01节课:本课程整体内容介绍:X-gen系统概况,包括:引入.X-gen项目背景.X-gen的HelloWorld第02节课:X-gen整体 ...
- 轻量级JAVA+EE企业应用实战(第4版)pdf电子书和源码的免费下载链接
轻量级JAVA+EE企业应用实战(第4版)pdf电子书和源码的免费下载链接: pdf链接:https://pan.baidu.com/s/1dYIWtsv2haL4v7vx3w-8WQ 无提取密码源码 ...
- Java工程师之Redis实战系列教程前言&目录
系列前言 Java工程师之Redis实战系列教程,同其他教程一样,均是在下学习笔记,本系列主要参考自<Redis-in-action>,将书本中的有趣的例子转化为能解决特定问题的示例程序, ...
- java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可!
java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可! 通过 云寻觅 javacallcsharp 生成器 自动生成java jni类库, ...
- Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观
Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java ...
- 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询
在我的上一篇博客<[java]itoo项目实战之hibernate 懒载入优化性能>中,我曾提到过学生数据有2万条,查询数据十分的慢,这是让人非常受不了的事情.看着页面进度条一直转着圈圈, ...
随机推荐
- 如何正确的在Android中存储特定应用文件
原文地址:How to Correctly Store App-Specific Files in Android Christophe Versieux (Waza_be)发表了一篇rant abo ...
- 使用web-component搭建企业级组件库
组件库的现状 前端目前比较主流的框架有react,vuejs,angular等. 我们通常去搭建组件库的时候都是基于某一种框架去搭建,比如ant-design是基于react搭建的UI组件库,而ele ...
- python 匹配集合与补集
- .Net Core 认证系统之Cookie认证源码解析
接着上文.Net Core 认证系统源码解析,Cookie认证算是常用的认证模式,但是目前主流都是前后端分离,有点鸡肋但是,不考虑移动端的站点或者纯管理后台网站可以使用这种认证方式.注意:基于浏览器且 ...
- 学习python所需要了解的一些基础计算机知识汇总
1)编程语言 语言是一个物体与另一个物体交流的介质,而编程语言就是程序员与计算机沟通的介质,人使用编程语言的目的就是控制计算机为人服务. 例如,用户使用用python语言编写的应用程序通过操作系统向C ...
- Kubernetes1.3新特性:支持GPU
(一) 背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫" ...
- 使用 VSCODE 在 Windows 10 WSL 中远程开发
使用 VSCODE 在 Windows 10 WSL 中远程开发 安装 VSCODE 1.35+ 版本. 在 VSCODE 中安装 WSL 插件. 点击左下角的 WSL 图标. 打开项目,提示路径. ...
- 从入侵到变现——“黑洞”下的黑帽SEO分析
概述 由于互联网入口流量主要被搜索引擎占据,网站在搜索引擎中的排名直接影响到市场营销效果,因此SEO服务应运而生.SEO(Search Engine Optimization)全称为搜索引擎优化,是指 ...
- Ubuntu matplotlib显示中文乱码的解决方法
https://blog.csdn.net/huuinn/article/details/78968966
- jmter正则表达式提取器
1.若返回的body内容为空,仅有 header值,则: \s代表为空 2.使用Debug来调试