cuda-cnn之mnist文件读取(1)
来源:互联网 发布:新西兰博士含金量知乎 编辑:程序博客网 时间:2024/04/30 23:23
https://github.com/zhxfl/CUDA-CNN
第一步是通过readMnistData读取训练样本和测试样本
"mnist\\train-images.idx3-ubyte",训练样本
"mnist\\train-labels.idx1-ubyte"训练标签
训练样本一共6W个
"mnist\\t10k-images.idx3-ubyte", 测试样本
"mnist\\t10k-labels.idx1-ubyte" 测试标签
测试样本一共1W个
样本包括训练样本和测试样本。标签包括训练标签和测试标签
readMnistData中read_Mnist用于读取样本read_Mnist_Label用于读取标签数据
整个样本数据结构由16字节头部
4字节的magic_number
4字节的样本数量 (小端)
4字节每个样本的rows (小端)
4字节每个样本的cols (小端)
比如
00000000h: 00 00 08 03 00 00 27 10 00 00 00 1C 00 00 00 1C ; ......'.........
00 00 08 03就是magic number
00 00 27 10 =10000个样本
00 00 00 1c 表示28行
00 00 00 1c 表示28列
接下来就是读取样本数据
一共读取magic_number个。每个28*28字节
因此
训练样本文件大小为28*28*60000+16=47040016
测试样本文件大小为28*28*10000+16=7840016
读取的时候每个图片分配的内存n_rows行*n_cols列*1通道。训练图片是灰度图。所以只有一通道,可能还有RGB三通道的。
cuMatrix<float>* tpmat = new cuMatrix<float>(n_rows, n_cols, 1);
依次读取灰度字节unsigned char 转换为缩放为float 存放到矩阵中。
tpmat->set(r, c, 0, (float)temp * 2.0f / 255.0f - 1.0f);
将0-255缩放到 -1到1之间的float保存 (float)temp * 2.0f / 255.0f - 1.0f
然后把这个cuMatrix矩阵的指针保存到矩阵指针向量trainX中
cuMatrixVector<float>trainX;
trainX 是一个保存float矩阵指针的向量。每一个元素都指向一个cuMatrix<float>的图片对象
接下来读取标签。
标签只有8个字节头。接下来的就是数据
00000000h: 00 00 08 01 00 00 27 10 ; ......'.
也是magic number + number
接下来的每个字节就是0-9标签
所以测试的lable文件大小为10008.样本的label大小为60008
不同的是标签只需要一个一维的向量表示就可以了 cuMatrix<int>* trainY
cuMatrix 的toGpu和toCpu就是整个矩阵结构的拷贝
由于label比较小。因此读取的时候就直接拷贝到显存当中了
cuMatrixVector包含了整个训练集。全部放到显存中不太好。因此读取的时候就只放到了内存中。没有拷贝到显存中去。
#cuMatrixVector的toGpu只是拷贝了整个vector的指针,分配了内容。但是里面的Matrix内容没有拷贝过去。
- cuda-cnn之mnist文件读取(1)
- Python读取MNIST文件
- 【TensorFlow】MNIST(使用CNN)
- tensorflow学习之---CNN识别MNIST
- tensorflow之用CNN识别MNIST
- MNIST(二):基于CNN的mnist识别
- Tensorflow系列之(二):详解CNN识别MNIST手写数字集
- (四)Tensorflow学习之旅——MNIST分类的卷积神经网络CNN示例
- 识别MNIST数据集之(一):读取数据
- 识别MNIST数据集之(一):读取数据
- python struct文件读取mnist字节文件
- 03-Keras之用MNIST数据集训练一个CNN
- Tensorflow之 CNN卷积神经网络的MNIST手写数字识别
- 使用C++和OpenCV读取MNIST文件
- 使用C++和OpenCV读取MNIST文件
- Mnist采用CNN代码
- tensorflow CNN for mnist
- rensorflow cnn mnist
- json_encode编码 和json_decode解码
- 微信:小程序于2017月1月9日发布
- ajax异步上传文件
- 观察者模式(基础)
- glide 集成okhttp3 解决https自签名证书问题
- cuda-cnn之mnist文件读取(1)
- Android中selector的使用
- D1带有陀螺仪的精度校准
- 【C语言学习笔记】printf,%n格式控制符中的异类?
- 【转载】PHP使用CURL抓取网站内容基础
- docker
- 进程间同步--互斥量和文件锁
- B样条差值算法图像放大的学习和实现
- 小米5之Root攻略