日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MnistData的读取

發布時間:2023/12/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MnistData的读取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個博客是留給自己備用的

#include <iostream> #include <string> #include <vector> #include <fstream> #include <eigen3/Eigen/Core>class MnistData { public:MnistData(std::string train_img_filename, std::string train_label_filename,std::string test_img_filename, std::string test_label_filename);void getMnistTrainData(Eigen::MatrixXd &_data);void getMnistTrainLabel(Eigen::MatrixXd &_data);void getMnistTestData(Eigen::MatrixXd &_data);void getMnistTestLabel(Eigen::MatrixXd &_data);private:void read_Mnist_Images(const std::string &filename, Eigen::MatrixXd &_data);void read_Mnist_Label(const std::string &filename, Eigen::MatrixXd &_data);int ReverseInt (int i);private:std::vector<std::string> imgDataPath;// {train image, train label, test image, test laebl} };MnistData::MnistData(std::string train_img_filename,std::string train_label_filename,std::string test_img_filename,std::string test_label_filename) {imgDataPath.push_back(train_img_filename);imgDataPath.push_back(train_label_filename);imgDataPath.push_back(test_img_filename);imgDataPath.push_back(test_label_filename); }void MnistData::getMnistTrainData(Eigen::MatrixXd &_data) {read_Mnist_Images(imgDataPath[0], _data); }void MnistData::getMnistTrainLabel(Eigen::MatrixXd &_data) {read_Mnist_Label(imgDataPath[1], _data); }void MnistData::getMnistTestData(Eigen::MatrixXd &_data) {read_Mnist_Images(imgDataPath[2], _data); }void MnistData::getMnistTestLabel(Eigen::MatrixXd &_data) {read_Mnist_Label(imgDataPath[3], _data); }void MnistData::read_Mnist_Images(const std::string &filename, Eigen::MatrixXd &_data) {std::ifstream file;file.open(filename.c_str(), std::ios::in | std::ios::binary);if (file.is_open()){int magic_number = 0;int number_of_images = 0;int n_rows = 0;int n_cols = 0;unsigned char label;file.read((char*)&magic_number, sizeof(magic_number));file.read((char*)&number_of_images, sizeof(number_of_images));file.read((char*)&n_rows, sizeof(n_rows));file.read((char*)&n_cols, sizeof(n_cols));magic_number = ReverseInt(magic_number);number_of_images = ReverseInt(number_of_images);n_rows = ReverseInt(n_rows);n_cols = ReverseInt(n_cols);std::cout << "magic number = " << magic_number << std::endl;std::cout << "number of images = " << number_of_images << std::endl;std::cout << "rows = " << n_rows << std::endl;std::cout << "cols = " << n_cols << std::endl;_data.resize(n_rows * n_cols, number_of_images);for (int i = 0; i < number_of_images; i++){Eigen::MatrixXd img(n_rows * n_cols, 1);for (int r = 0; r < n_rows; r++){for (int c = 0; c < n_cols; c++){unsigned char image = 0;file.read((char*)&image, sizeof(image));img(n_rows * r + c, 0) = (double)image / 255.0;}}_data.col(i) = img;}}if (file.is_open())file.close(); }void MnistData::read_Mnist_Label(const std::string &filename, Eigen::MatrixXd &_data) {std::ifstream file(filename.c_str(), std::ios::in | std::ios::binary);if (file.is_open()){int magic_number = 0;int number_of_images = 0;file.read((char*)&magic_number, sizeof(magic_number));file.read((char*)&number_of_images, sizeof(number_of_images));magic_number = ReverseInt(magic_number);number_of_images = ReverseInt(number_of_images);std::cout << "magic number = " << magic_number << std::endl;std::cout << "number of images = " << number_of_images << std::endl;_data.resize(10, number_of_images);_data.setZero();for (int i = 0; i < number_of_images; i++){unsigned char label = 0;file.read((char*)&label, sizeof(label));_data((int)label, i) = 1;}}if (file.is_open())file.close(); }int MnistData::ReverseInt (int i) {unsigned char ch1, ch2, ch3, ch4;ch1=i&255;ch2=(i>>8)&255;ch3=(i>>16)&255;ch4=(i>>24)&255;return((int)ch1<<24)+((int)ch2<<16)+((int)ch3<<8)+ch4; }

總結

以上是生活随笔為你收集整理的MnistData的读取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。