static void CNN(List <DenseVector[]> Data)//畳み込みニューラルネットワーク { //MNISTの読み込み MNistImageLoader imgLoader = MNistImageLoader.Load("train-images.idx3-ubyte"); MNistLabelLoader lLoader = MNistLabelLoader.Load("train-labels.idx1-ubyte"); //////////データ用意 Random rnd = new Random(); List <DenseVector[]> xds = new List <DenseVector[]>(); for (int i = 0; i < 10000000; i++) { xds.Add(new DenseVector[2] { new DenseVector(1), new DenseVector(1) }); double a = rnd.NextDouble(); xds[i][0][0] = a; xds[i][1][0] = 5 * a * a; } List <DenseVector[]> Tests = new List <DenseVector[]>(); for (int i = 0; i < 100; i++) { Tests.Add(new DenseVector[2] { new DenseVector(1), new DenseVector(1) }); double a = rnd.NextDouble(); Tests[i][0][0] = a; Tests[i][1][0] = a * a; } //////////データ用意終 UseNN UseCNN = new UseNN(); UseCNN.Add(new int[] { imgLoader.numberOfRows *imgLoader.numberOfColumns, 100, 100, 100, 100, 100, 100, 20, 20, 9 } , new int[] { 0, 1, 2, 1, 2, 1, 2, 0, 0, 0 }); }
/// <summary> /// MNIST のデータをロードする. /// 失敗した時は null を返す. /// </summary> /// <param name="path">画像データのパス.</param> /// <returns></returns> public static MNistImageLoader Load(string path) { // ファイルが存在しない if (File.Exists(path) == false) { return(null); } // バイト配列を分解する FileStream stream = new FileStream(path, FileMode.Open); BinaryReaderBE reader = new BinaryReaderBE(stream); MNistImageLoader loader = new MNistImageLoader(); loader.magicNumber = reader.ReadInt32(); loader.numberOfImages = reader.ReadInt32(); loader.numberOfRows = reader.ReadInt32(); loader.numberOfColumns = reader.ReadInt32(); int pixelCount = loader.numberOfRows * loader.numberOfColumns; for (int i = 0; i < loader.numberOfImages; i++) { byte[] pixels = reader.ReadBytes(pixelCount); loader.bitmapList.Add(pixels); } reader.Close(); return(loader); }
static void Main(string[] args) { //MNISTの読み込み MNistImageLoader imgLoader = MNistImageLoader.Load("train-images.idx3-ubyte"); MNistLabelLoader lLoader = MNistLabelLoader.Load("train-labels.idx1-ubyte"); Console.WriteLine(imgLoader.numberOfImages); Console.WriteLine(lLoader.numberOfItems); int n = 3375; byte[] image = imgLoader.bitmapList[n]; byte label = lLoader.labelList[n]; for (int i = 0; i < imgLoader.numberOfRows; i++) { for (int j = 0; j < imgLoader.numberOfColumns; j++) { if (image[i * imgLoader.numberOfRows + j] >= 255) { Console.Write("#"); } else { Console.Write(" "); } } Console.WriteLine(); } Console.WriteLine(label); Console.ReadLine(); }