public FormMain() { InitializeComponent(); //GPUを初期化 Weaver.Initialize(ComputeDeviceTypes.Gpu); }
public void Conv2DGPURandomTest() { Weaver.Initialize(); if (Weaver.Enable) { RandomTest(true); } else { Assert.Inconclusive(); } }
static void Main(string[] args) { //全て.Net Framework上で実行したい場合はこちらをコメントアウト Weaver.Initialize(ComputeDeviceTypes.Gpu); //Weaver.Initialize(ComputeDeviceTypes.Cpu, 1); //複数デバイスがある場合は添字が必要 //MLPによるXORの学習 Test1.Run(); //MLPによるXORの学習【回帰版】 //Test2.Run(); //MLPによるSin関数の学習 //Test3.Run(); //MLPによるMNIST(手書き文字)の学習 //Test4.Run(); //エクセルCNNの再現 //Test5.Run(); //5層CNNによるMNISTの学習 //Test6.Run(); //BatchNormを使った15層MLPによるMNISTの学習 //Test7.Run(); //LSTMによるSin関数の学習 //Test8.Run(); //SimpleなRNNによるRNNLM //Test9.Run(); //LSTMによるRNNLM //Test10.Run(); //Decoupled Neural Interfaces using Synthetic GradientsによるMNISTの学習 //Test11.Run(); //Test11のDNIをcDNIとした //Test12.Run(); //Deconvolution2Dのテスト(Winform) //new Test13WinForm().ShowDialog(); //Test6を連結して実行 //Test14.Run(); //CaffeモデルのVGG16を読み込んで画像分類をさせるテスト //Test15.Run(); //ChainerモデルのTest5と同じ内容を読み込んで実行 //Test16.Run(); //CaffeモデルのRESNETを読み込んで画像分類をさせるテスト //Test17.Run(Test17.ResnetModel.ResNet50); //任意のResnetモデルを選択してください //CIFAR-10を5層CNNを使って学習する //Test18.Run(isCifar100:false, isFineLabel:false); //CaffeモデルのAlexNetを読み込んで画像分類をさせるテスト //Test19.Run(); //Linearの分割実行 //TestX.Run(); //ベンチマーク SingleBenchmark.Run(); Console.WriteLine("Test Done..."); Console.Read(); }
static void Main(string[] args) { //全て.Net Framework上で実行したい場合はこちらをコメントアウト Weaver.Initialize(); //Weaver.Initialize(ComputeDeviceTypes.Cpu); //複数の種類のデバイスがある場合はデバイスタイプを指定 //Weaver.Initialize(ComputeDeviceTypes.Gpu, 1); //同じ種類のGPUやCPUが複数ある場合は添字を使用 Console.WriteLine("Running on " + Weaver.InfoString); //MLPによるXORの学習 //Sample01.Run(); //MLPによるXORの学習【回帰版】 //Sample02.Run(); //MLPによるSin関数の学習 //Sample03.Run(); //MLPによるMNIST(手書き文字)の学習 //Sample04.Run(); //エクセルCNNの再現 //Sample05.Run(); //5層CNNによるMNISTの学習 //Sample06.Run(); //BatchNormを使った15層MLPによるMNISTの学習 //Sample07.Run(); //LSTMによるSin関数の学習 //Sample08.Run(); //SimpleなRNNによるRNNLM //Sample09.Run(); //LSTMによるRNNLM //Sample10.Run(); //Decoupled Neural Interfaces using Synthetic GradientsによるMNISTの学習 //Sample11.Run(); //Test11のDNIをcDNIとした //Sample12.Run(); //Deconvolution2Dのテスト(Winform) //new Sample13WinForm().ShowDialog(); //Test6を連結して実行 //Sample14.Run(); //CaffeモデルのVGGを読み込んで画像分類をさせるテスト //Sample15.Run(Sample15.VGGModel.VGG16); //VGG16またはVGG19を選択してください //ChainerモデルのTest5と同じ内容を読み込んで実行 //Sample16.Run(); //CaffeモデルのRESNETを読み込んで画像分類をさせるテスト //Sample17.Run(Sample17.ResnetModel.ResNet50); //任意のResnetモデルを選択してください //CIFAR-10を5層CNNを使って学習する //Sample18.Run(isCifar100:false, isFineLabel:false); //CaffeモデルのAlexNetを読み込んで画像分類をさせるテスト //Sample19.Run(); //Linearの分割実行 //SampleX.Run(); //ベンチマーク SingleBenchmark.Run(); Console.WriteLine("Done..."); Console.Read(); }
static void Main(string[] args) { //Comment out here if you want to run on..NET Framework Weaver.Initialize(ComputeDeviceTypes.Gpu); //Weaver.Initialize (ComputeDeviceTypes.Cpu, 1); //Subscript required if there are multiple devices //learning XOR with MLP //Test1.Run (); //Learning XOR with MLP (Regression version) //Test2.Run (); //Learning of Sin function by MLP //Test3.Run (); //Learning of MNIST (handwritten character) by MLP //Test4.Run (); //Reproduction of Excel CNN //Test 5. Run (); //Learning of MNIST with 5 - layer CNN //Test6.Run (); //Learning of MNIST by 15 layer MLP using BatchNorm //Test7.Run (); //Learning of Sin function by LSTM //Test8.Run (); //RNNLM with a simple RNN //Test9.Run (); //RNNLM by LSTM //Test10.Run (); //MNIST learning by Decoupled Neural Interfaces using Synthetic Gradients //Test11.Run (); //Set DNI of Test 11 as cDNI //Test12.Run (); //Test of Deconvolution 2D (Winform) //new Test 13 WinForm (). ShowDialog (); //Connect Test 6 and execute //Test14.Run (); //Test that reads VGG 16 of Caffe model and makes image classification //Test15.Run (); //Load the same contents as Test 5 of Chainer model and execute it //Test16.Run (); //Test to load image classification by loading RESNET of Caffe model //Test17.Run(Test17.ResnetModel.ResNet50); //Please choose an arbitrary Resnet model //CIFAR-10を5層CNNを使って学習する //Test18.Run(); //Linearの分割実行 //TestX.Run(); //benchmark SingleBenchmark.Run(); Console.WriteLine("Test Done ..."); Console.Read(); }
public static void Main(string[] args) { //Cifar-10のデータを用意する Console.WriteLine("CIFAR Data Loading..."); CifarData cifarData = new CifarData(); //platformIdは、OpenCL・GPUの導入の記事に書いてある方法でご確認ください Weaver.Initialize(ComputeDeviceTypes.Gpu, platformId: 1, deviceIndex: 0); //ネットワークの構成を FunctionStack に書き連ねる FunctionStack nn = new FunctionStack( /* 最初の4層の畳み込み層を削除 * new Convolution2D (3, 64, 3, pad: 1, gpuEnable: true), * new ReLU (), * new Convolution2D (64, 64, 3, pad: 1, gpuEnable: true), * new ReLU (), * new MaxPooling(2, 2, gpuEnable: true), * * new Convolution2D (64, 128, 3, pad: 1, gpuEnable: true), * new ReLU (), * new Convolution2D (128, 128, 3, pad: 1, gpuEnable: true), * new ReLU (), * new MaxPooling(2, 2, gpuEnable: true), */ // (3, 32, 32) new Convolution2D(3, 64, 3, pad: 1, gpuEnable: true), new ReLU(), new Convolution2D(64, 64, 3, pad: 1, gpuEnable: true), new ReLU(), new Convolution2D(64, 64, 3, pad: 1, gpuEnable: true), new ReLU(), new MaxPooling(2, 2, gpuEnable: true), // (64, 16, 16) new Convolution2D(64, 128, 3, pad: 1, gpuEnable: true), new ReLU(), new Convolution2D(128, 128, 3, pad: 1, gpuEnable: true), new ReLU(), new Convolution2D(128, 128, 3, pad: 1, gpuEnable: true), new ReLU(), new MaxPooling(2, 2, gpuEnable: true), // (128, 8, 8) new Convolution2D(128, 128, 3, pad: 1, gpuEnable: true), new ReLU(), new Convolution2D(128, 128, 3, pad: 1, gpuEnable: true), new ReLU(), new Convolution2D(128, 128, 3, pad: 1, gpuEnable: true), new ReLU(), new MaxPooling(2, 2, gpuEnable: true), // (128, 4, 4) new Linear(128 * 4 * 4, 1024, gpuEnable: true), new ReLU(), new Dropout(0.5), new Linear(1024, 1024, gpuEnable: true), new ReLU(), new Dropout(0.5), new Linear(1024, 10, gpuEnable: true) ); //optimizerを宣言 nn.SetOptimizer(new Adam()); Console.WriteLine("Training Start..."); // epoch for (int epoch = 1; epoch < 10; epoch++) { Console.WriteLine("\nepoch " + epoch); //全体での誤差を集計 Real totalLoss = 0; long totalLossCount = 0; //何回バッチを実行するか for (int i = 1; i < TRAIN_DATA_COUNT + 1; i++) { //Console.WriteLine ("\nbatch count " + i + "/" + TRAIN_DATA_COUNT); //訓練データからランダムにデータを取得 TestDataSet datasetX = cifarData.GetRandomXSet(BATCH_DATA_COUNT); //バッチ学習を並列実行する Real sumLoss = Trainer.Train(nn, datasetX.Data, datasetX.Label, new SoftmaxCrossEntropy()); totalLoss += sumLoss; totalLossCount++; //結果出力 Console.WriteLine("total loss " + totalLoss / totalLossCount); Console.WriteLine("local loss " + sumLoss); //50回バッチを動かしたら精度をテストする if (i % 50 == 0) { Console.WriteLine("step: " + i + " Testing..."); //テストデータからランダムにデータを取得 TestDataSet datasetY = cifarData.GetRandomYSet(TEACH_DATA_COUNT); //テストを実行 Real accuracy = Trainer.Accuracy(nn, datasetY.Data, datasetY.Label); Console.WriteLine("accuracy " + accuracy); } } } }
static void Main(string[] args) { //Comment out here if you want to run all on .Net Framework Weaver.Initialize(ComputeDeviceTypes.Cpu); //Weaver.Initialize(ComputeDeviceTypes.Cpu, 1); //Subscript required if there are multiple devices //Learning XOR with MLP //Test1.Run(); //Learning XOR with MLP 【Returned version】 //Test2.Run(); //Learning of Sin function by MLP //Test3.Run(); //Learning of MNIST (Handwritten Characters) by MLP //Test4.Run(); //Reproduction of Excel CNN //Test5.Run(); //Learning of MNIST by 5-layer CNN //Test6.Run(); //Learning of MNIST by 15-tier MLP using BatchNorm //Test7.Run(); //Learning of Sin function by LSTM //Test8.Run(); //RNNLM with Simple RNN //Test9.Run(); //RNNLM by LSTM //Test10.Run(); //Decoupled Neural Interfaces using Synthetic Gradients by learning MNIST //Test11.Run(); //DNI of Test 11 was defined as cDNI //Test12.Run(); //Test of Deconvolution 2D(Winform) //new Test13WinForm().ShowDialog(); //Concatenate Test 6 and execute //Test14.Run(); //Test to read VGA 16 of Caffe model and classify images //Test15.Run(); //Load and execute the same content as Test 5 of Chainer model //Test16.Run(); //Test that reads RESNET of Caffe model and classifies images //Test17.Run(Test17.ResnetModel.ResNet50); //Please select any Resnet model //Learn CIFAR-10 with 5-layer CNN //Test18.Run(); //Partial execution of Linear //TestX.Run(); // LeakyReLu and PolynomialApproximantSteep combination network //Test19.Run(); // 1000 layer neural network Test20.Run(); //benchmark //SingleBenchmark.Run(); Console.WriteLine("Test Done..."); Console.Read(); }
public static void Main() { // platformIdは、OpenCL・GPUの導入の記事に書いてある方法でご確認ください // https://jinbeizame.hateblo.jp/entry/kelpnet_opencl_gpu Weaver.Initialize(ComputeDeviceTypes.Gpu, platformId: 1, deviceIndex: 0); // ネットからVGGの学習済みモデルをダウンロード string modelFilePath = InternetFileDownloader.Donwload(DOWNLOAD_URL, MODEL_FILE); // 学習済みモデルをFunctionのリストとして保存 List <Function> vgg16Net = CaffemodelDataLoader.ModelLoad(modelFilePath); // VGGの出力層とその活性化関数を削除 vgg16Net.RemoveAt(vgg16Net.Count() - 1); vgg16Net.RemoveAt(vgg16Net.Count() - 1); // VGGの各FunctionのgpuEnableをtrueに for (int i = 0; i < vgg16Net.Count - 1; i++) { // GPUに対応している層であれば、GPU対応へ if (vgg16Net[i] is Convolution2D || vgg16Net[i] is Linear || vgg16Net[i] is MaxPooling) { ((IParallelizable)vgg16Net[i]).SetGpuEnable(true); } } // VGGをリストからFunctionStackに変換 FunctionStack vgg = new FunctionStack(vgg16Net.ToArray()); // 層を圧縮 vgg.Compress(); // 新しく出力層とその活性化関数を用意 FunctionStack nn = new FunctionStack( new Linear(4096, 1, gpuEnable: true), new Sigmoid() ); // 最適化手法としてAdamをセット nn.SetOptimizer(new Adam()); Console.WriteLine("DataSet Loading..."); // 訓練・テストデータ用のNdArrayを用意 // データセットは以下のURLからダウンロードを行い、 // VGGTransfer /bin/Debug/Data にtrainフォルダを置いてください。 // https://www.kaggle.com/c/dogs-vs-cats/data NdArray[] trainData = new NdArray[TRAIN_DATA_LENGTH * 2]; NdArray[] trainLabel = new NdArray[TRAIN_DATA_LENGTH * 2]; NdArray[] testData = new NdArray[TEST_DATA_LENGTH * 2]; NdArray[] testLabel = new NdArray[TEST_DATA_LENGTH * 2]; for (int i = 0; i < TRAIN_DATA_LENGTH + TEST_DATA_LENGTH; i++) { // 犬・猫の画像読み込み Bitmap baseCatImage = new Bitmap("Data/train/cat." + i + ".jpg"); Bitmap baseDogImage = new Bitmap("Data/train/dog." + i + ".jpg"); // 変換後の画像を格納するBitmapを定義 Bitmap catImage = new Bitmap(224, 224, PixelFormat.Format24bppRgb); Bitmap dogImage = new Bitmap(224, 224, PixelFormat.Format24bppRgb); // Graphicsオブジェクトに変換 Graphics gCat = Graphics.FromImage(catImage); Graphics gDog = Graphics.FromImage(dogImage); // Graphicsオブジェクト(の中のcatImageに)baseImageを変換して描画 gCat.DrawImage(baseCatImage, 0, 0, 224, 224); gDog.DrawImage(baseDogImage, 0, 0, 224, 224); // Graphicsオブジェクトを破棄し、メモリを解放 gCat.Dispose(); gDog.Dispose(); // 訓練・テストデータにデータを格納 // 先にテストデータの枚数分テストデータに保存し、その後訓練データを保存する // 画素値の値域は0 ~ 255のため、255で割ることで0 ~ 1に正規化 if (i < TEST_DATA_LENGTH) { // ImageをNdArrayに変換したものをvggに入力し、出力した特徴量を入力データとして保存 testData[i * 2] = vgg.Predict(NdArrayConverter.Image2NdArray(catImage, false, true) / 255.0)[0]; testLabel[i * 2] = new NdArray(new Real[] { 0 }); testData[i * 2 + 1] = vgg.Predict(NdArrayConverter.Image2NdArray(dogImage, false, true) / 255.0)[0]; testLabel[i * 2 + 1] = new NdArray(new Real[] { 1 }); } else { trainData[(i - TEST_DATA_LENGTH) * 2] = vgg.Predict(NdArrayConverter.Image2NdArray(catImage, false, true) / 255.0)[0]; trainLabel[(i - TEST_DATA_LENGTH) * 2] = new NdArray(new Real[] { 0 }); //new Real [] { 0 }; trainData[(i - TEST_DATA_LENGTH) * 2] = vgg.Predict(NdArrayConverter.Image2NdArray(dogImage, false, true) / 255.0)[0]; trainLabel[(i - TEST_DATA_LENGTH) * 2] = new NdArray(new Real[] { 1 }); // = new Real [] { 1 }; } } Console.WriteLine("Training Start..."); // ミニバッチ用のNdArrayを定義 NdArray batchData = new NdArray(new[] { 4096 }, BATCH_SIZE); NdArray batchLabel = new NdArray(new[] { 1 }, BATCH_SIZE); // 誤差関数を定義(今回は二値分類なので二乗誤差関数(MSE)) LossFunction lossFunction = new MeanSquaredError(); // エポックを回す for (int epoch = 0; epoch < 10; epoch++) { // 1エポックで訓練データ // バッチサイズ の回数分学習 for (int step = 0; step < TRAIN_DATA_COUNT; step++) { // ミニバッチを用意 for (int i = 0; i < BATCH_SIZE; i++) { // 0 ~ 訓練データサイズ-1 の中からランダムで整数を取得 int index = Mother.Dice.Next(trainData.Length); // trainData(NdArray[])を、batchData(NdArray)の形にコピー Array.Copy(trainData[index].Data, 0, batchData.Data, i * batchData.Length, batchData.Length); batchLabel.Data[i] = trainLabel[index].Data[0]; } // 学習(順伝播、誤差の計算、逆伝播、更新) NdArray[] output = nn.Forward(batchData); Real loss = lossFunction.Evaluate(output, batchLabel); nn.Backward(output); nn.Update(); } // 認識率(accuracy)の計算 // テストデータの回数データを回す Real accuracy = 0; for (int i = 0; i < TEST_DATA_LENGTH * 2; i++) { NdArray[] output = nn.Predict(testData[i]); // 出力outputと正解の誤差が0.5以下(正解が0のときにoutput<0.5、正解が1のときにoutput>0.5) // の際に正確に認識したとする if (Math.Abs(output[0].Data[0] - trainLabel[i].Data[0]) < 0.5) { accuracy += 1; } accuracy /= TEST_DATA_LENGTH * 2.0; Console.WriteLine("Epoch:" + epoch + "accuracy:" + accuracy); } } }