<< 2026年04月
新着記事
最近のコメント
月別
カテゴリ
2026.03.18 12:12

POSIX準拠ってこんなにあったんだな


・そんなことでニューラルネットで遊んでいたら某OS関係の原稿依頼が来たのでニューラルネット側はいったんgit pushしておいて下調べ。
・検索検索してドキュメントにたどり着いたけど、初見人にとっては結構深いところに置かれているという感じ。まぁ慣れの問題なのだろうけど。
・そういえばPOSIX互換を謳うものはいろいろあるよなと思ってWikipediaを開いてみたら出てくる出てくる、懐かしい名前。あったなあそういうの・・・とか、あれ?これもPOSIXの皮をかぶせたんだなどなど、ちょっぴりセピア色になっていたのだった。

2026.03.17 14:13

自作CNNも無事動作


・どうしてもうまく収束してくれないので、ちょっとFNNのみ使って試そうとして見直していて、とんでもないというのか間抜けなミスを見つけた。
・MNISTのデータを255で割ったつもりが、CNN用に変形したときにうっかり再度255で割り算してしまっている・・・
・10枚程度ならなんとかなるけど、100枚もいろいろなデータがあるとノイズに紛れて収束しないことになるだろうな。
・ということで、ここを修正していざ実行・・・・おぉ、いいじゃないかいいじゃないか・・・孤独のグルメモード。最後に実行した結果を見ると良い感じ。
・この四苦八苦でだいぶ勉強になったな。
・で、とりあえず、50000個あるサンプルデータ(本当はこっちあ教育用で、テスト用は別にあるんだけどまぁ別に実験だから悪くはない)の先頭40000個を100個ずつ取り出して学習させてみて、40000個目からの100個で正答率を見てみる。
・これは先日のFNN(全結合ニューラルネット)のときと同じ。ただ、CNNはやたらと遅いので、とりあえず一周(1エポック)、つまり先頭から4万個を1回だけ学習させてテスト。
・と、たった一周分なのに96%の認識率となった。
・数エポック繰り返せば更に認識率は上がるだろう。
・今はFNNが1段とCNNが1段だけなので、更に複数段にするなどしたらもう少し収束も早くなるかな?といったところ。
・それにしてもやはりPython+Numpyだと遅い。まぁ、無駄なところも多々あるとは思うのだけど。
・交差エントロピーとか、いろいろ調べているうちに用語が出てきたのでそのたりも時間を見て試してみようかな。

2026.03.16 13:14

CNNがなかなか収束しないなぁ


・振り込みしておこうということで久しぶりにWindows11を立ち上げたらなかなか重い。再起動してもやっぱり重い。あぁ、どうせUpdateだな。ということでしばらく待っていたらなんとか使えるくらいの重さになった。
・しかし、ネットバンキングの画面デザインが変わってなんとなく使いにくい。まぁ、動くから良いんだけど。
・CNNがなかなか収束しない。いろいろやってんみるのだけど、入力の数が増えると急速に収束が悪くなる感じ。何だろうなぁ。


2026.03.15 21:31

とりあえず単純パターンで学習させてみる


・昨日夜にいろいろやっていたら値落ちしてしまった。
・というところでフォワード、バックワードともエラーなく実行できたのでテスト用のデータを連続して流してみる。
・一応最終出力と教師データの差分の自乗の和、数式的に書けばΣ(Output-T)[Tは教師データ]という感じの値をループ一回ごとに表示させてみる。
・すると、結構良い感じで少しずつ学習が進んでいくのがわかる。どんどん値が小さくなっていく、つまり誤差が減っていく。
・500回くらい回したところで結果を出力すると(あたりまえだけど)ちゃんと判定できている。
・ただ、CNNx2+FNNx2という4段構成のせいなのか、そもそもCNN自体の重さもあるのかとにかく遅い。Numpyだけ使って多重ループでCNNの行列演算している時点で演算負荷が重いことは多少は覚悟していたけど、それにしても重い。
・本格的にやるならやはりこの道の専用ライブラリを使うべきか



2026.03.14 16:01

とりあえず一周動作


・ホワイトデーというのか、円周率の日というのかって、毎年思ってる気がする。
・産医師異国に向こう 産後厄無く産児御社(みやしろ)に 虫さんさん闇になく 郷には早よ行くな ・・・と出てきて、もう少し先まで語呂合わせしていたのだけど、忘れたな。
・そんなところで、CNNの畳み込み、プーリングとそれぞれの逆方向も出来上がったので実行してみる。
・まずはフォワーディング
 テストデータ(8x8)=(拡張)=>24x24=>畳み込み#1=>22x22=>パディング=>24x24=>プーリング#1=>12x12=>パディング=>14x14=>畳み込み#2=>12x12=>プーリング#2=>6x6
 ときて、内部のフィルタ数はCNNはそれぞれ10個にしてみたので、出力は6x6x10=360これを、FNN(全結合)で360=>10=>2
・これを教師データと比較してバックワード
 FNN#2=>FNN#1=>CNN#2=>CNN#1
 と戻っていくわけだけど、なぜかCNN#2はちゃんと動くのにCNN#1がエラーになる。何が起きているのかと思ったら
    d_x[:,:,i:i+self.f_h,j:j+self.f_w] += np.sum(w_reshaped*curr_err, axis=1)
numpy._core._exceptions._UFuncOutputCastingError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
 とか言っている。どうやら、int64で作ったところにfloat64を入れるのがよろしく無いらしい。で、改めてd_xは?と思ったら
d_x = np.zeros_like(self.indat)
 とあった。
・なるほど。入力されるデータが整数画像データだったので、気を利かせてint64で生成されてしまったのか。対策は安易にGeminiに頼ったら後ろに
 .astype(np.float64)
をつければ良いとわかって、やってみたら成功。
・さて、これで繰り返していったら学習は進むのかな?

2026.03.13 07:26

CNN畳み込みの書き直し


・イランがホルムズ海峡に機雷を敷設したという話が出ていたのだけど、こんどは「通行するのには許可が必要だ。許可のない船は攻撃する」とイキったらしい。あれ?機雷はリモートでON/OFFできるようになっているのかな?
・ということで、CNNのフォワードとバックワードを書き直し。
・今までフィルタ1枚ずつループして計算していたけど、考えたら行列演算一発でまとめてできる。
・その他ちょっと無駄な代入や分離していたのを一行にまとめたりしていったら「たったこれだけ?」になった。すごいなNumPy。

2026.03.12 08:09

CNN見直し


・なんだかCNNの方にいろいろ手を入れていたらぐちゃぐちゃになってきたのでもう一回整理。フォワードのときとバックワードの時で共通して持っておくべきもの、持っておいたほうが良いものがあれこれあるというところ。とりあえず、行列の扱いもだいぶ慣れてきたかな。
・で、ちょっと書いたものを試しにGeminiに投げてみたら「コメントでこう書いてあるけど・・・」というご指摘。そこまで読むか。
・それにしてもこのLLMというのは一体どういう構造をしているのだろうな。

2026.03.11 19:39

トラ技の付録


・あの日からもう15年。そうだな。あまり備えはしていないけど、とりあえず先日、非常用のトイレはそこそこの回数分備えておくことにした。
・先日のことだけど、トラ技の今月号が届いた。今月の付録が「エンジニア手帳2026」これは結構便利そうだ。オペアンプを使った基本的なフィルタからよく使うモジュール類のピン配置、基板のパターン設計関係の資料などなど、とにかく盛りだくさん。

2026.03.10 17:05

CNN+全結合


・なんとなくできた感じなので、とりあえずCNNを2段、その後全結合層を2段という構成にして、まずはForward側。テストパターンを突っ込んで出力を眺めるとなんとなくそれっぽく動いていそうな感じもするけど。
・というところで、続きをやろうと思っていたのだけど、なんとなく眠気が勝ってしまって気がついたら日付が変わる寸前。ちゃんと寝よう。


2026.03.09 22:51

一応forward側は動いている・・・かな?


・で、プーリング層のバックプロパゲーション部分も書く。こちらはさほどややこしくはない。入力されたものをnp.repeatして引き伸ばしてフォワードのときに作ったマスクパターンと掛け算すれば良い。
・とりあえずテストしようということで、簡単な8x8の縦横パターンを作ってやってみたら変なところでエラー。
・なんかエラーメッセージがよくわからないので、一旦コメントアウトし削ったものを復活させながらチェックしたら、思わぬところで変なミスをしていた。
・というところで気を取り直して改めてテストパターンを入れてテスト。なんとなくそれっぽくなってきたけど、さすがに元画像が8x8だとプーリングしてしまうと小さくなりすぎる。
・仕方ないので、np.repeatして拡張してから実行。ついでなのでnp.padでパディングして畳み込みした後に小さくならないように拡張しておく。
・さて、なんとなくそれっぽい結果にもなったことだし。明日は2層にしてみるか。