ご挨拶
初めまして、メイビスデザインの Jin です。
Qiita初心者ですので、不躾なところがあるかもしれません。あらかじめご了承ください。
概要
今回は、GitHubに登録している回帰タスク用のサンプル SampleScenarioReg.ipynb をベースに試行した際に、つまずいたポイントを書きます。
基本的には、上記のサンプルを生成AIに読み込ませて「こうしたい」と指示すれば、それなりに推論できるコードは出てきます。
APIの詳細は SAMACT Framework documentation を参照してください。
また、ここで詳しく説明しない内容(MinMaxScalingなど)は、他の方の記事でも学べるので、気になる方は調べてみてください。
つまづき①:正規化(MinMaxScaling)
サンプル SampleScenarioReg.ipynb では、MinMaxScalingによる正規化を行っています。
私がつまずいたのは、学習データ用と推論データ用で別々にインスタンスを作ってしまった点です。
「なんか推論結果がおかしいな…」と思い、@nhnhnh さんにアドバイスを求めたところ、ここが原因でした。
当然といえば当然ですが、
スケーラーが異なると、同じ値でも正規化結果が変わってしまいます。
つまり、
- 学習時のスケーラー
- 推論時のスケーラー
は同じものを使う必要があります。
修正後は正常な結果が出るようになりました。
以下はOK例とNG例です。
OK:学習用と推論用のスケーラーが同じもの
# データX用スケーラー
scaler_X = MinMaxScaler()
X_train_scaled = scaler_X.fit_transform(X_train_raw)
:
X_pred_scaled = scaler_X.transform(X_pred_raw) # 学習済みスケーラー使用
NG:学習用と推論用が別々にインスタンスされている
# 学習用スケーラー
scaler_X_train = MinMaxScaler()
X_train_scaled = scaler_X_train.fit_transform(X_train_raw)
:
#推論用スケーラー
scaler_X_pred = MinMaxScaler()
X_pred_scaled = scaler_X_pred.fit_transform(X_pred_raw)
なぜ、SAMACTではMinMaxScaler?
スパイクエンコーディングが MinMaxScaler と相性がよいこともあり、
SAMACT(SNN:Spiking Neural Network)では、MinMaxScaling を推奨しています。
また、SAMACTの学習メソッドである Fit() に指定する説明変数の範囲は 0-1の範囲のみを許可しているという理由もあります。
詳細は APIドキュメント を参照ください。
つまづき②:学習回数(Epoch)
サンプルにあるEpochは学習回数です。
当たり前ですが、Epochを増やすと学習時間も増えます。
試しに大きめの値を設定してみたところ、なかなか終わらず、途中で止めたことがあります…(^^;
体験的には、まずは小さい値から試すことをお勧めします。
ちなみに、Copilotに適当に吐かせたサンプルだと、epoch=50 で出してきました。
これは、ケースによっては多い寄りになる恐れもあります。皆さんもお気を付けください。

まとめ
実際に触ってみると、精度調整以前に「設定ミス」でハマることがあると感じました。
特に前処理(正規化)は重要なので注意が必要です。
リンク集
| リソース | URL |
|---|---|
| GitHub(サンプル・ドキュメント・フォーラム) | https://github.com/maviss-design/SAMACT |
| PyPI(パッケージ) | https://pypi.org/project/samact/ |
| APIドキュメント | https://maviss-design.github.io/SAMACT/ |
| 弊社Webサイト | https://maviss-design.com/ |
| お問い合わせ | https://maviss-design.com/contact/ |
| Qiita記事:オンチップ学習可能なエンドポイントAI IPのPythonシミュレータを公開しました | https://qiita.com/nhnhnh/items/243d9adbd4e79c44ca29 |
ライセンス
AGPLv3 を採用しています。研究・検証目的での利用を歓迎しますが、商用利用や量産用途をご検討の場合は別途お問い合わせください。