ホーム >  C# >  【C#】ニューラルネットワークのライブラリを作る その2【MNIST】

投稿日:

【C#】ニューラルネットワークのライブラリを作る その2【MNIST】

C#Visual Studio機械学習

C#で、ニューラルネットワークのライブラリを作成します。

ニューラルネットワークの実験用データ準備

前回 ニューラルネットワークのライブラリをC#で定義しました。今回は、ニューラルネットワークのプログラミング実験で使用する学習データMNISTを使用します。

MNISTの使用目的

プログラムでは、ニューラルネットワークのにMNISTの画像を入力し、その画像の数字が出力できるように、エッジの重みを微調整していきます。

準備

①Macに「Visual Studio Community 2019 for Mac」をインストールします。

【C# for Mac】Visual StudioをMacにインストールする。【環境構築/開発】

②人工ニューロンについてざっくり解説します。

高校生でもわかる!ディープラーニングの人工ニューロンの話

③C#を使用して、簡単なニューラルネットワークのライブラリを作ってみます。

【C#】ニューラルネットワークのライブラリを作る その1【機械学習】

環境

PC MacBook Air (Retina, 13-inch, 2019)
CPU 1.6 GHz デュアルコアIntel Core i5
メモリ 16 GB 2133 MHz LPDDR3
OS Catalina 10.15.7
XCODE Version 12.3
Visual Studio Community 2019 for Mac Version 8.7.4 (build 38)


MNISTをダウンロード

①以下のURLを開きます。

 The MNIST database(Modified National Institute of Standards and Technology database)

②以下のリンクをクリックして、ダウンロードします。今回は、「train-images-idx3-ubyte.gz」、「train-labels-idx1-ubyte.gz」を使用します。

  • train-images-idx3-ubyte.gz 学習データ。6万枚の手書き数字の画像。
  • train-labels-idx1-ubyte.gz 上記学習データの正解データ(教師データ)。

BMP形式にするツールをVisualStudioで作る

①VisualStudioを起動します。「+新規」をクリックします。

②[新しいプロジェクト] ダイアログで、「Web and Console」(Web とコンソール) ノードの下にある 「アプリ」を選択します。「コンソール アプリケーション」テンプレートを選択し、「次へ」を選択します。

③「.NET 5.0」を選択し、「次へ」をクリックします。

④「プロジェクト名」に「MNIST2BMP」と入力し、「作成」を選択します。

以下のようにVisualStudioのプロジェクトが作成されます。


VisualStudioでBMPを扱えるようにする

「VisualStudio For Mac」の標準状態では、BMPファイルをプログラムで扱うことができません。nugetから以下のパッケージをインストールする必要があります。

  • System.Drawing.Common
  • runtime.osx.10.10-x64.CoreCompat.System.Drawing

①ソリューションエクスプローラーの「依存関係」を「Control+クリック」します。「NuGetパッケージの管理(M)…」をクリックします。

②右上の検索欄に「System.Drawing」と入力し、「System.Drawing.Common」「runtime.osx.10.10-x64.CoreCompat.System.Drawing」をチェックして「パッケージの追加」をクリックします。

以下のように、パッケージがインストールされます。

BMP形式に変換するツールのEXEを作成する

①以下のソースコード「Program.cs」を記述します。

using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

public class Program
{
    static void Main(string[] args)
    {
        byte[] pixel = new byte[28 * 28];
        Bitmap bitmap = new Bitmap(28, 28);
        //フォルダーを作る
        System.IO.Directory.CreateDirectory(@"bmp_data");
        //フォルダを読み込む
        using (FileStream fsPixel =
            new FileStream(@"train-images-idx3-ubyte", FileMode.Open))
        {
            using (BinaryReader brPixel = new BinaryReader(fsPixel))
            {
                brPixel.ReadInt32(); //ファイルのヘッダー部分を読み飛ばす
                brPixel.ReadInt32();
                brPixel.ReadInt32();
                brPixel.ReadInt32();
                //ピクセルのデータを読み込んでBMP形式で保存する
                for (int i = 0; i < 60000; i++)
                {
                    for (int j = 0; j < 28 * 28; j++)
                    {
                        pixel[j] = brPixel.ReadByte();
                    }
                    for (int y = 0; y < 28; y++)
                    {
                        for (int x = 0; x < 28; x++)
                        {
                            bitmap.SetPixel(x, y, Color.FromArgb(
                                (int)pixel[y * 28 + x],
                                (int)pixel[y * 28 + x],
                                (int)pixel[y * 28 + x]));
                        }
                    }
                    bitmap.Save(@"bmp_data¥image" + i + ".bmp", ImageFormat.Bmp);
                    System.Console.WriteLine(@"bmp_data¥image" + i + ".bmp");
                }
            }
        }
    }
}

②VisualStudioの左上の「Debug」を「Release」に変更します。

③メイン メニューから、「ビルド」→「フォルダーに公開…」の順に選択します。

④「フォルダーに公開」ダイアログで、 「公開」 を選択します。

⑤publish フォルダーが開き、作成されたファイルが表示されます。


train-images-idx3-ubyte.gzの配置・解凍

①Program.csを実行する前に、train-images-idx3-ubyte.gzを、「MNIST2BMP」フォルダの「bin/Debug/net5.0/」に配置します。

  • ~/Projects/MNIST2BMP/MNIST2BMP/bin/Debug/
  • net5.0/
  • MetadataExtractor.dll
  • Microsoft.Win32.SystemEvents.dll
  • MNIST2BMP.deps.json
  • MNIST2BMP.dll
  • MNIST2BMP.pdb
  • MNIST2BMP.runtimeconfig.dev.json
  • MNIST2BMP.runtimeconfig.json
  • ref
  • runtime.osx.10.10-x64.CoreCompat.System.Drawing.dll
  • runtimes
  • System.Drawing.Common.dll
  • train-images-idx3-ubyte.gz
  • XmpCore.dll

②MacのFinder→「アプリケーション」→「ユーティリティ」→「ターミナル」を開きます。下記のコマンドを実行してtrain-images-idx3-ubyte.gzを解凍します。

gzip -d ~/Projects/MNIST2BMP/MNIST2BMP/bin/Debug/net5.0/train-images-idx3-ubyte.gz

③左上の再生ボタンをクリックして実行します。

以下のようにBMP画像が展開します。


次回

工事中。


トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告