Repolode
itskonrad

itskonrad/tinymnist

約250行の純粋なCで書かれた最小構成のニューラルネットワークで、手書きのMNIST数字を分類します。

スター
1,287
フォーク
130
未解決の Issue
3
最終コミット
25 日前

これは何?

tinymnistは、純粋なCで実装された小規模なニューラルネットワークで、MNISTデータセットの手書き数字を分類します。プログラム全体は約250行で、依存するのはC標準ライブラリだけです。

モデルは、入力784個、256ユニットのReLU隠れ層、10クラスのsoftmax出力層で構成される全結合ネットワークです。交差エントロピー損失とモーメンタム付きSGDで学習します。MNISTの学習データがdataディレクトリに同梱されているため、gccでコンパイルすればそのまま実行できます。

このプロジェクトでは、20エポック後に約98%のテスト精度を達成し、各エポックの所要時間は約0.5秒とされています。データの80%を学習に使い、残りの20%をテスト用に確保します。隠れ層のサイズ、学習率、モーメンタム、エポック数、学習データの割合などのハイパーパラメータは、main.cの先頭にある#define定数で設定します。

主な機能

  • 01標準ライブラリ以外の依存関係がない、純粋なCによる実装
  • 02ReLUとsoftmaxを使った2層の全結合ネットワーク
  • 03交差エントロピー損失とモーメンタム付きSGDで学習
  • 04MNISTの学習データを同梱しており、すぐに実行可能
  • 05ハイパーパラメータを#define定数で調整可能

ユースケース

  • ニューラルネットワークの仕組みを基礎から学ぶ
  • 深層学習フレームワークを使わずに順伝播と逆伝播を学ぶ
  • MNIST分類実験のためのコンパクトなベースラインとして使う

クイックスタート

  1. 1

    gccでプログラムをコンパイルします

    gcc -O3 -march=native -ffast-math -o main main.c -lm
  2. 2

    一から学習させたネットワークを実行します(MNISTデータはdata/に含まれています)

    ./main

使う前に知っておきたいこと

  • 教育用のごく小さなモデルであり、実用環境で使える数字分類器ではありません。
  • 設定を変更するには、main.c内の#define定数を編集して再コンパイルする必要があります。

収録されている特集

トピック

よくある質問

tinymnist とは?
約250行の純粋なCで書かれた最小構成のニューラルネットワークで、手書きのMNIST数字を分類します。 tinymnistは、純粋なCで実装された小規模なニューラルネットワークで、MNISTデータセットの手書き数字を分類します。プログラム全体は約250行で、依存するのはC標準ライブラリだけです。
tinymnist は無料で使えますか?ライセンスは?
tinymnist は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
tinymnist は今もメンテナンスされていますか?
活発にメンテナンス中。tinymnist の最終コミットは 2026年10月13日 です。
tinymnist は何に使えますか?
ニューラルネットワークの仕組みを基礎から学ぶ 深層学習フレームワークを使わずに順伝播と逆伝播を学ぶ MNIST分類実験のためのコンパクトなベースラインとして使う
tinymnist のインストール方法は?
gccでプログラムをコンパイルします: gcc -O3 -march=native -ffast-math -o main main.c -lm 一から学習させたネットワークを実行します(MNISTデータはdata/に含まれています): ./main
tinymnist はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/itskonrad/tinymnist

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト