前面实现了图像转列向量,在之前推导过程中使用的是行向量,所以修改im2col.py,实现im2row的功能

卷积核大小为\(2\times 2\),步长为1,零填充为0

  • field_height = 2
  • field_width = 2
  • stride = 1
  • padding = 0

2维图像大小为\(3\times 3\),3维图像大小为\(2\times 3\times 3\),4维图像大小为\(2\times 2\times 3\times 3\)

所以输出数据体的空间尺寸为\(2\times 2\),深度为2,数量为2

  • out_height = 2
  • out_width = 2
  • depth = 2
  • N = 2
阅读全文 »

im2col表示image to column,将图像转换成列向量

卷积操作步骤:首先将卷积核映射到x_padded左上角,然后沿着行方向操作,每次滑动stride距离;到达最右端后,将卷积核往列方向滑动stride距离,再实现从左到右的滑动

阅读全文 »

cs231n课程Convolutional Neural Networks: Architectures, Convolution / Pooling Layers中提到使用矩阵乘法方式完成卷积层及池化层操作,同时在Assignment #2: Fully-Connected Nets, Batch Normalization, Dropout, Convolutional Nets中给出了一个卷积层转全连接层的实现 - im2col.py

im2col表示将滤波器局部连接矩阵向量化为列向量(column vector),在行方向进行堆叠,最终得到2-D矩阵

im2col.py使用 花式下标求解 的方式,让我觉得应该写篇文章好好学习一下

本文介绍一些numpy实现,下一篇介绍im2col实现,第三篇实现im2row,第四篇介绍另一种实现图像和行向量互换的方式,最后实现池化层图像和行向量的互换pool2row

  1. 数组扩展
  2. 数组变形
  3. 数组填充
  4. 维数转换
  5. 矩阵提取
  6. 数据叠加
阅读全文 »

卷积神经网络(convolutional neural network)在神经网络(neural network)的基础上进一步发展,实现更强大的分类、识别性能

结合cs231n课程Convolutional Neural Networks: Architectures, Convolution / Pooling Layers,介绍卷积层和池化层,以及基于卷积层、池化层和全连接层的卷积神经网络常用的组成模式

暂不涉及之后发展的网络结构和组成模式

卷积神经网络以神经元为单位进行网络组织,不同于神经网络的2-D处理,卷积神经网络假定输入数据是图像(image),每层的输入输出都是一个3维数据体(3-D volume),各层神经元不仅在2-D空间上进行排列,还在深度(depth)上进行组织

卷积神经网络主要的层类型有卷积层(convolutional layer)、池化层(pooling layer)和全连接层(fully-connected layer

阅读全文 »

使用numpy实现神经网络模型

  • 使用单层神经网络OneNet实现逻辑或、逻辑与和逻辑非分类
  • 使用2层神经网络TwoNet实现逻辑异或分类
  • 使用3层神经网络ThreeNet实现iris数据集和mnist数据集分类
阅读全文 »

为了理清如何进行神经网络的前向传播和反向传播的推导,找了很多资料,前向传播比较简单,重点在于如何进行反向传播的梯度计算

cs231n课程推荐的计算方式是先进行单个元素求导,再逐步泛化到批量数据求梯度,参考

阅读全文 »

神经网络的反向传播可以通过对损失函数进行微分得到各层权重矩阵的梯度

其中对损失函数求梯度是实值标量函数一阶微分,其中关键的部分是得到Jacobian矩阵,从而转置获取梯度矩阵

阅读全文 »