java写卷积神经网络---卷积神经网络(CupCnn)的数据结构

前言

我在写CupCnn的时候,一个困扰我很久的问题,就是如何组织卷积神经网络的数据结构。尤其是卷积层和全连接层之间的衔接问题。卷积层至少需要四维的数据结构(batch+channel+height+width),而全连接层则只需一个二维的数据即可(batch+数据)。
CupCnn是我用java实现的一个卷积神经网络,它的源码可以从github下载:
点击下载CupCnn

卷积神经网络模型

这里写图片描述
这张图片是一个很典型的卷积神经网络模型,在CupCnn中识别手写数字的例子中使用的模型和它非常类似。从图中可以看出,卷积层和全连接层有很大的不同,全连接层用一维数组就可以表示(加上batch就是二维),而卷积层的数据则至少需要一个三维的数据结构(加上batch就是四维,batch是指训练的时候,一次送入神经网络的图片的数量。)。同一个神经网络,使用统一的数据接口会使编程更加容易,因此,我们必须使用统一的四维模型来装载一切的数据。

在CupCnn中,这个数据接口叫Blob,它的实现如下:

public class Blob implements Serializable{
   
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private double[] data;
    private int numbers;
    private int channels;
    private int width;
    private int height;
    private int id;

    public Blob(int numbers,int channels,int height,int width){
        this.numbers = n
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值