2026.03.31 18:26
ネタ元の問題だったか
・そんなところでOSがらみな原稿を書いているのだけど、GCC君たちにお尋ねしてそれをドキュメントで裏取りするということをしていたら、結構単純な部分で意見の相違。内容は非常に単純で、メッセージのビット数が32ビットなのか64ビットなのかという、それだけのことなのだけどどうも話がおかしい。
・で、ドキュメントを掘っていったらなるほど、三者三様になるわけだ。ネタ元となる資料の中で一貫性がないときた。拾う場所によって違う見解となったということなんだな。
・あぁ、時間があればソースコードを掘りたい。
2026.03.30 17:20
ムベンバ効果の空想
・お湯を冷凍庫に入れるほうが水を入れるより速く凍る現象という「ムペンバ効果」というのが実は太古の昔からよく知られているらしい。
・なんとなく、大勢の子どもたちが手をつなごうというときのようなもので、動き方にはばらつきがあり、結晶になる段階で、一部の振動が減って「お相手」が見つかったときに、まだ手をつなぐ相手が見つからないやつはなるべく大きく動いて相手を見つけるほうが早く見つかる・・・なんていうのを想像した。
・これだと、ある段階で急速に温度が下がっていくということになるけど、本当にそんなことになるのかな?
2026.03.29 17:13
テーブルタップ
・というところで、先日ちょいとテーブルタップを買いにいった。
・今まで使っていたものが突然コード部分が焼ききれるという危機一髪だったので、ここはやはりそれなりにお金かけるかなどと考えて、選んだのはやっぱりパナソニック。電材関係ではWorld-Wideで圧倒的な信頼度だし。
・もちろん、「電気用品安全法準拠」である。
・ホコリがはいらないようにするシャッター付きだけど、これが防水にもなっているらしい。裏を見ると10l/分で50cmのところから30秒あてて試験したそうで。
・そういえば、松下電工=>ナショナル=>パナソニックというのを知らない世代というのも増えているのだとか。昭和は遠くなりにけり。
2026.03.28 20:17
やはり自分で書くと勉強になる
・先日ちょっと言った先。あちらもいろいろあって少々残念なお話となった。
・とりあえず今年はこのままだけど。
・というところで、パラパラっとニューラルネットワークの本を開いてみたりする。なんとなく開いたところで図と説明を拾い読みする程度でもなんとなく書いていることがわかる感じがする。やはりそれなりに苦労して学んだのは無駄ではなかったな。
・もう少し勉強したら自分なりに噛み砕いて書いてみるか。
2026.03.27 19:33
原稿カキカキ
・そんなところで、GCCの助けも借りながらドキュメントを読みつつ整理して図を描いて原稿書き。
・自分で疑問に感じるところ、気になるところは極力潰しておかないと書いていて気持ちが悪いのでわずか数行を書くために数時間ということも。
・時給換算したら50年前の学生アルバイトより少ないだろうな。
2026.03.26 07:26
子供・子育て支援金?それ効果ありますか?
・「子供子育て支援金」・・・まぁ、「独身税」とも言われるけれど、これの天引きが始まるという。
・新規に始めるような顔をしているけど、実はこの金、企業からはずっと前から取られている。「子供・子育て拠出金」で調べればわかるとおり、従業員に払う給与の0.36%。単純計算で1万円あたり36円なので、決して少ない額ではない。
・ここに更に従業員側からも徴収しようという魂胆である。
・ここまでずっと徴収されてきたわけだけど、その成果はどうだったのだろう?と言えばほとんど何の効果も見られないというのが正直なところではないのかな。
・真の原因を調べずにいきあたりばったりで対症療法的な対策をしてもトラブルは収まらないのと同じことで、漫然とお題目だけ付けてばらまくのではなく、きちんとした原因を探り、施策の効果を検証した上で検討決定、ときには廃止するという、当たり前のことを当たり前にやってほしいものだ。
2026.03.24 21:16
洗濯機届いたけど・・・今度はテーブルタップか
・そんなところで洗濯機はリプレース。いやそれにしても下が汚いこと。「これくらいは大したことないですよ」と言われたけど。
・いままでのより一回り容量は多くなったのだけど、大きさは大差ない。これなら、毛布も気兼ねないな。
・さて、一安心と思って入浴跡ドライヤをかけていたらいきなり止まった。壊れた?と思ったけど、まさかねと思って充電器をつけてみると通電していない。
・もとを見てもちゃんと刺さっている。おかしいなと思っていたら通電したりしなかったり。
・と、ふとみたらケーブルの被覆が破れて中の導線がむき出しになっている。急いで元から抜いて速攻で処分リスト入り。しかし、そこまで痛めつけてはいなかったと思うのだけどな。
・今度買ってこよう。
2026.03.23 21:08
洗濯機壊れた
・いきなり洗濯機がエラー。洗濯機を回していてなんだか静かだなと思ったあとにピーピー鳴り出した。おかしいな、また蓋を開けたままにしていたかなと思って見に行ったけど蓋は閉じているのにエラーになっている。
・あけてみると、脱水ができていない感じ。洗剤臭がほぼ無いので、たぶんすすぎの後で止まったのだろう。
・ダメ元でいろいろやってみると、底にあるパルセーターは回るけど、洗濯槽が回転しない。モーターのうなり音はするので、拘束されてしまった感じかな。
・ためしに洗濯槽を無理やり回してみるとなんか音がして回転した。
・そのままダメ元で脱水してみると、何かが擦れているような音がしたまま回りだしたけど、このまま使うのはさすがに無理だろう。
・とりあえず、ごくわずか脱水して諦めて干した跡電気屋に急ぐ。
・事前にネットで価格を見て、店頭に。2万円ほど高かったから画面を見せたら一瞬で同じ価格までダウン。しかも在庫もあるというので即決。
・明日届くらしいので、一安心。
2026.03.22 20:59
ChatGPTとは相性悪いかな
・やっぱりChatGPTとは相性が良くない感じ。
・一言でいうと「情報ヲタク」というところか。やたらと細かいところまでよく知っているけど、知りすぎているが故なのか、「こういうこと?」と訪ねようものなら意気揚々とほんの些細な部分までいちいち訂正したり、そこを修正しようとする。
・いや、それはわかってるから・・・と言いたいところが次々に出てくるのでなんだか読んでいて疲れる。
・というところで、ぼちぼちと図版から。しっかし、検索してもみんな表層的な部分だけしか書いてないな。疑問に思わないのかなとも思ったけど、考えてみたら個人的にそこまで手を伸ばしていこうというのはなかなかいないか。
2026.03.21 09:50
ChatGPTは人を従わせようとする?
・GCCバトルを見ているけれど、それぞれの性格も見えてくる。
・ChatGPTは「〜だよね?」と確認をすると、言葉の端々を取り上げてここが違う、あれが違うとダメ出しをしてくる。いろいろ試しているけど、ちょっとでも表現に曖昧な点とか、「ここまでの会話でここの認識は共有されているよね?」と思えるような点を端折って質問すると「ほぼ合っています。ただし・・・」とその点について延々と説明をはじめた挙句にこちらの質問内容にバツ印を付けて訂正してくるという有様。
・単純に「〜について」という類の質問ならさほどでもないけど、「〜ということ?」と尋ねると思い切りマウントを取りに来るし、「こうじゃないの?」というと叩き潰しにくるかのような、威圧感をまとった言葉の弾丸が飛んでくる感じがする。
・専門的というのかロジカルな世界の話なので、そうかそうか・・・とスルーしていられるけれど、もし一般的な事柄だったらどうだろう。次第に「自分で考える」ということ自体を放棄して言われたとおりにするのが正しい、AIの回答が正義となっていかないだろうか。
・これでは、ChatGPTは人をAIに従わせようとする傾向が強いのかな?と思えてしまう。
・傾向として、質問されたことについては、数学のように細かいところまで厳密な正確性を求める傾向だということなのだろうけど、それは「人とのコミュニケーション」という上では必ずしも正義にはならないし、訂正するにしても、もう少し回答の文書構成を考えないといけないのではないかな。
・もう一つわかってきたのは(今の技術水準では当たり前なのか、それとも無料の範囲だからということなのかはわからないけどひょっとして、ここがわかっていないかも?」と察して言葉を足すような能力がほぼゼロだということ。
・実際の会話なら話がうまく噛み合っていないかなと思えるときにそういうトラップのような言葉を間に挟んでおいて、相手が「え?」という反応をしたら、「あぁ、そこはこうなっているから」と補足したりということもあるけれど、AIとのやりとりではそのようなものはまず出てこない。
・なので、下手をすると大きな勘違いが残ったまま変な理解をしてしまう可能性も高いような気がする。
・普通の日常会話の類ならそのあたりはスルーしても構わないのだろうけど、時々テレビに移る若者の、「ちゃっぴー」なんて友達感覚のような扱いをしているのを見るとちょっと心配にもなってくるのだった。
2026.03.20 08:10
GCCバトル
・20日の分を投稿したはずなので、消えてしまった。
・世間では連休入りらしく
・沖縄で抗議船を使った海上からの基地建設地見学で女子高生が亡くなったという事故で、ネット上では運行側の問題がいろいろ取り上げられているのだけど、なぜかテレビでも新聞でも、根室のときのような騒ぎ方、責任の追求をしない。それどころかほぼ黙殺、スルーという感じ。
・この運行者(団体?)に触れてはまずい何かがあるのだろうか。
・そんなこんなでGCCを使っていろいろお問い合わせしては、ドキュメントの該当箇所を探すということをやってみているのだけど、どうも言っていることがいちいちおかしい。G vs C vs Cという感じで、一つの答えをコピペして、「ということであってる?」というとダメ出ししてきてバトルになってくる。
・もう、面倒くさいからソースコード読んでしまった方がらくかもしれないと思わなくもない。
2026.03.19 17:04
OSドキュメントはなかなか掘れない
・昨日に続いてOSをあれこれ。ちょっと面倒なのでGCCにお問い合わせして、「それって本当?」とドキュメントで確認・・・といきたいのだけど、このドキュメントがまたややこしい。欲しい情報がなかなか書いてないという。
・それでもなんとか少しずつ勉強。大筋はまぁ予想通りと言えるけど、細かいところがいちいち引っかかる。
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層にしてみるか。
2026.03.08 22:09
プーリング処理を書いてみる
・昨日、「ただ、全部ゼロだったらまずいので、そこは避けないとだめだな。
」なんて書いたけど、そもそも「最大値の位置が1」という条件なんだから、全部0ということはありえない。ということに、寝入りばなに気がついた。なんだかボケてるな。
・ということで、プーリング処理をコーディング。
2026.03.07 23:30
プーリング層のコーディング方針を整理
・プーリング層を考えることに。こちらのフォワード側は要するに2x2なり3x3といった領域に分割して、その領域を代表する値を作る。
・最もよく使われるのは最大値をとるMaxプーリングと呼ばれる手法らしい。
・たとえば2x2の領域ごとに分割してMaxプーリングするとき、入力が
1 2 3 4
4 8 6 7
7 3 9 2
4 8 3 7
という具合になっていれば出力は
8 7
8 9
となる。これはnp.maxを使うと割と簡単に抽出できる。
・入力は畳み込み層の出力なので、構造は[バッチサイズ,フィルタ数、 Xサイズ、Yサイズ]な4次元配列なので、ここからプーリングサイズ分切り出して
xmax=np.max(x,axis=(2,3),keepdims=True)
して4次元配列まま最大値位置を取り出す。
・で、バックプロパゲーションのためには最大値がどの場所だったのかも記録しないといけない。こちらは
mask=np.where(x==xmax,1,0)
で一発でいける。めったに無いけど、運悪く全く同じ値になる場所が複数あったときには責任を分け合ったほうが良いのだろうか。もしやるなら、
mask=np.where(x==xmax,1,0)/np.sum(xmax,axis=(2,3),keepdims=True)
で良さそうだ。
・ただ、全部ゼロだったらまずいので、そこは避けないとだめだな。
・あとはバックプロパゲーションするときには戻ってきた行列(仮にerr_inとする)との乗算、つまり
err_in*mask
をしてやれば、NumPyが勝手にブロードキャストしてくれるので、該当箇所だけ値が戻る形にしてくれる。
・…というのが、どうやらプーリング層の実装になるらしい。明日暇があったらコーディングして完成させよう。
・しかし、CNNってやたらと時間かかりそうだな。やはりもっとC/C++なりで作成された高水準ライブラリを使わないと駄目かもしれないな。
・とりあえず実際にMNIST認識をやらせてみてからPyTorchを使う方向も考えよう。
2026.03.06 23:46
バックプロパゲーションもなんとか書けた
・Chromeに脆弱性があったとかでアップデート
・いつものことながら自動ではうまくアップデートしてくれないので、.debパッケージをダウンロードしてsudo apt installでインストール。最後になんかエラーっぽいメッセージは出たけど、Chrome再起動したら「バージョン 145.0.7632.159(公式ビルド) (64 ビット)」となっていたので、たぶん良いのだろう。
・ということで、CNNの続きでバックプロパゲーションを書く。
・行数にすればわずか数行の演算なのだけど、やりたいことをどう書いたら良いのかという感じ。ウェイトやバイアスはまだ良いけど、入力に戻す誤差成分を算出するのはちょっと面倒だった。
・行列の形でいうと、バックプロパゲーションのときに後段から戻ってくる誤差データは[バッチサイズ、出力チャンネル数(フィルタ数)、Yサイズ、Xサイズ]な4次元配列データ。バッチサイズというのは、一度に複数の画像データをまとめて処理するときの画像の枚数。フィルタはたとえば3x3といった小さい領域に対する重みデータで、これが元画像から切り出した同じサイズ(3x3)のデータと積和演算されているわけだ。
・元画像側がカラー画像だと1つの画像がRGBの3枚で形成されている。これが入力チャンネル。
・で、ごちゃごちゃしたけど、1つのニューロンは
・入力:9つ(3x3)の画素データがチャンネル数分
フィルタ(3x3の重みデータ)がチャンネル数分
バイアス値がチャンネル数分
・出力:画素の各位置と対応するフィルタの値を掛けて全部足す、さらにバイアス値も足す
ということをやっていて、これが平面にズラーッと並んだものがあり、更にこれがフィルタ数分あるという感じ。
・重み(フィルタ)
weight[output_ch_num, input_ch_num, fil_xsize, fil_ysize]
・誤差データ
err_in[Bach_Size, output_ch_num, xsize, ysize]
ということで、こいつらの積和ってことなので、まずは掛け算するために次元を揃える。err_in側は1点ずつ(ニューロン1個分ずつ)切り出すので、i,jをy方向、x方向のスキャンとして、
weight_reshape = weight.reshape(1,output_ch_num, input_ch_num, fil_xsize, fil_ysize)
err_reshape = err_in[:,:,i:i+1,j:j+1].reshape(batch_size,output_ch_num,1,1,1)
で、あとは出力チャンネル数方向で積和をとってやる(複数のフィルタをかけたものを通したものからそれぞれ入力に誤差分が戻って合流する感じ)
np.sum(weight_reshape*err_reshape, axis=1)
入力データは[batch_size, input_ch_num, input_xsize, input_ysize]みたいな感じで4次元。ここからフィルタサイズ分切り出したところに足せば良いんだから、
d_input[:,:,i:i+fil_xsize, j:j+fil_ysize] = np.sum(weight_reshape*err_reshape, axis=1)
何ていう感じ。わずか数行だけど、ここにたどり着くのは少々しんどかったよと。
・他の部分もまとめてなんとかバックプロパゲーションは書けた(と思う)
・一応Gemini君は「完璧」と言ってくれたけど、本当にちゃんと動くのかな?
2026.03.05 18:13
CNNのバックプロパゲーションが見えてきた&全結合の修正で認識率96%
・というところで、バックプロパゲーションを・・・と思って書き出そうとしたらいきなりVSCode君がコードを吐き出してくれた。たぶんCoPilotが生成したんだろう。
・なんとなく面白いけどねと思いながら、それを下に置いて1行ずつ自分で改めて書きながら読むということをしていたのだけど、途中でわけがわからなくなってきた。
・ということで、困った時のいつものGCC・・・この手のはGeminiも得意だよねということで質問していたら、なんか話が噛み合わない。
・で、ある程度まとまったコードブロックを提示したら、「それ、変だよ」と指摘してきた。
・いちいち指摘が的確というのか、「なんでこの値を掛けてるんだ?」と疑問に思っていた部分がやはり間違っている。
・「CoPilotが自動生成したんだけどね」といったら「あはは・・そうでしたか」ときて、CoPilotに対してちょっと「あいつのコード生成はね・・・」的な指摘をしてくるのがまた可笑しい。
・というところで、じっと考えて整理できてきた。わかってしまえばそれほど難しくは無いのだけど、バッチサイズ分まとめてたり、フィルタ数分まとめて考えていたりというのを一度に考えると頭の中で行列がごちゃごちゃしてややこしいのだな。
・そんなこんなでやっていたら、全結合の方で軽い勘違いを見つけた。まぁ、2層程度なら問題ないんだけど、バックプロパゲーションで前段に戻すときにもLR(Learning Rate)を掛け算してしまっていたという凡ミス。
・これを修正してLRを更に小さくして(でないと、途中でオーバーフローしやすい)再度全結合でMNISTしてみたら正答率96%となった。うん、標準的な値とされる範囲になったな。
2026.03.04 17:46
とりあえず順方向は良いかな
・ぼちぼちとpythonで書く。四次元配列に混乱しそうになりながらとりあえずCNNクラスの__init__()と順方向はできたかな?
・バックプロパゲーションがちょっと難しい。というのか、4次元の配列を眺めているとどうも頭が混乱しそうになる。
・もう一回ちょっと整理しよう
2026.03.03 23:41
CNNの仕組みがだいぶ見えた・・・かな
・さて、GCC(Gemini/Chatwork/Copilot)君に書かせたコードを眺めていると、フィルタの枚数やX,Yのサイズなどの他にChannelというパラメータがある。何だこれ?ということでお尋ねしたら例えばカラー画像データのRGBのようなものとのこと。なるほどね。
・たとえばRGBであればそれぞれについてフィルタをかけてやって、RGBの三枚分のデータを全部足し算するという流れらしい。
・PyTorchなどのライブラリを使えば楽できるらしいけど、今回はNumPyだけでやるので地道にループさせる。
・で、もう一つ。出力側にもやはりチャンネルがある。画素ごとの重みをつけるフィルタの構造は
filter[出力チャンネル数、入力チャンネル数、Yサイズ、Xサイズ]
という4次元配列になる。たとえば、入力がRGBの3チャンネルあって、フィルタのサイズが5x5ならば
filter[出力チャンネル数,3,5,5]
つまり、入力チャンネル数×出力チャンネル数分のフィルタがあるということ。これはつまり、入力画像の1つのチャンネルの一つずつ(たとえばRGBならばRの画像など)についてN個のチャンネル(つまりN個のフィルタ)があるという具合。
・要するに演算の考えとしては1つのニューロンが元画像の3x3なり5x5なりといった狭い領域について全結合ニューラルネットと同じような積和演算をしていて、これがズラッと並んでいる(元画像の1ドットずつシフトしながら)。
・外から見るとちょうど元画像を底面としたピラミッドがたくさん重なり合いながら並んでいる感じで、これが入力チャンネル数×出力チャンネル数個あるわけだ。
・全結合のように、このニューロンすべてが独立したウェイトとバイアスをもたせるという手もあるけど、そこを節約して同じ出力チャンネルに属するニューロンのウェイトやバイアスは共通で使うことにした。それをフィルタと称している・・・とまぁそんな感じで解釈できるのだろう。
そんなことをすると要求されるメモリ量が膨大なものになってしまう。そこで同じチャンネルのニューロン(要するに一つのピラミッド群)
のウェイトやバイアスは同じものを使うことにしていると思えば良いのだろう。
・
3x3とか5x5とかのパターンを使いまわしているという点
全結合ニューラルネットの1層目なんかと同じようなものと思えば良いのかな?と
イメージ的には全結合のときに同じ入力に対してズラッとニューロンが並ぶようなのと似ていて、同じフィルタをかけたものを
・
2026.03.02 08:33
Claudeか。生成AIの名前はCがお好き?
・米国国防省がらみで花札君がお怒りになったとかいう
Claude(日本語版はこちら)をちょっとお試し。
・アカウントを作らなくても、このAIチャットのところで遊べるのでちょっと試してみたけど、なんとなくしっくりこない。Geminiのおべんちゃら(死語?)にもいささか参るけど、こちらの回答の雰囲気もなんとなく。
・ちょっとしたプログラムを作らせてみたらまぁ普通に生成してくれたし、読みやすくなってはいるけれど、もう少しちゃんとコメント入れてほしいかなという感じ。
・これもお仲間に入れるとGCCCか。生成AIの名称は’C’がお好き?
2026.03.01 07:37
CNNのためのテストパターンを作っておこう
・さて、CNNの仕組みとしてはほぼ正解だった(らしい)ので、現状の全結合ニューラルネットの前処理的に畳み込み層とプーリング層を追加することに。
・いきなりMNISTで試すとわけがわからなくなりそうなので、単純なものでフィルタがどう形成されるのかわかるように8x8の単純なパターンを作成してまずは全結合でテスト。
・最初うっかりして全く同じデータに違う答えを与えたら見事に収束せず。あわてて修正したらすぐ収束して予定通り。
・さて、ぼちぼち書いていこう。