ml_t

minimal; manual; machine learning

2024-01-01から1年間の記事一覧

26「変分オートエンコーダVAE」

25「最適化アルゴリズムのSGD,RMSprop,Adamを手計算してみる」

各々の最適化アルゴリズムの式に簡単な関数の値を入力して、torch optimizerの出力と一致するか確認した。結果は一致した。SGDの更新式はシンプルでわかりやすい。これに、勾配の大きさ(gtの2乗)で更新量を抑制したり、過去の勾配の大きさ(α・Vt-1)を導入し…

24「簡単な関数で最適化アルゴリズムを試す」

機械学習で誤差を最小にするためのパラメータ更新(最適化アルゴリズム)のシミュレーションを、適当かつ簡単な関数で可視化した。下図で縦軸を誤差(Loss)、横軸をパラメータとした関数が青色線、その微分がオレンジ線である。青色線が最低となるところへ向…

23『姿勢推定モデルのネットワークは何を出力しているか』

姿勢推定モデルのネットワークは何を出力しているか、を理解するために、コードを見ていってモデル途中を可視化した。3x368x368のサイズのカラー画像を入力とし、futuremapという46x46の画像を中継点として、最終的に22枚の46x46画像を出力していた。この出…

22『強化学習のアクションのQ値の推移②』

3x3に配置された計9部屋があって、左上の部屋をスタートとして、右下の部屋の右の出口からでれば成功(Reward)とする。9つの状態(State)の各々での上下左右の4アクションのQ値を学習した。9部屋の範囲を超えての移動は不可とし、このアクションのQ値は-1と…

21『強化学習のアクションのQ値の推移①』

自販機で商品を購入する場合を想定して、状態State:自販機にコインが入っていない(S0) / コインが入っている(S1)アクションAction:コイン入れる(a0) / ボタン押す(a1) / 返却レバー(a2) として強化学習(Q-learning)させてみました。この学習経過における行…

20『機械学習の畳み込み途中の画像を可視化』

花のカラー画像(ひまわり22枚、あさがお28枚、すいせん28枚)を準備し、3チャンネルの96x96ピクセルにして、畳み込み→プーリング→畳み込み→プーリング(*)→畳み込み→プーリング(*)→全結合層→全結合層にて出力し、クロスエントロピー誤差を逆伝播させてパラメ…

19『オートエンコーダによる画像の異常部分の検知』

オートエンコーダにもいろいろ種類があるようですが、ここでは最もわかりやすそうなシンプルなものをやってみます。単純な画像(構造や特徴が均質である画像)を複数用意し、その画像を畳み込みニューラルネットワーク+全結合層のニューラルネットワークで学…

18『Deconv, TransposedConvについて』

畳み込み(convolution)は、カーネル(フィルタ)で処理される過程がイメージできますが、逆畳み込み(deconvolution)もしくは転置畳み込み(transposed convolution)は計算の過程をイメージすることがむずかしいと感じてきました。ネットワーク出力(out)に対する…

17『画像の機械学習_torch.nnの畳み込みの挙動』

畳み込みにおいて、カーネル(フィルタ)の枚数、重み、バイアスは具体的にどう計算に利用されているのか?torch.nn.Conv2dを用いると裏で自動的に行われて意識せずともコードがワークし機械学習が進みます。仕組みを知りたかったので、実際の数値を手計算して…

16『画像の機械学習_NNとCNNの学習比較』

同じ画像データ(12×12)を用いて、NNとCNNによる多項分類('B','T','I'の判定)の学習過程を比較した。誤差はクロスエントロピー誤差、SGD法(学習率0.01)は共通。テストデータは同じものを20サンプル使用した。著しい差とまではいかないが、CNNの方が学習が早く…

15『画像の機械学習_CNN多項分類』

いよいよ画像を畳み込みニューラルネットワークでモデルの機械学習を行います。とはいっても、畳み込み(convolution)→プーリングにて画像(行列)のサイズを小さくしておいて、これをLinearにして通常のニューラルネットワークをするということで、畳み込み・…

14『画像の機械学習_畳み込み (Convolution)』

画像データをニューラルネットワークへ投入する際に、そのまま短冊をつなぎ合わせるように数列化(Linear化)して投入してもよいが、せっかくの2次元のデータの関連性が失われてしまう。2次元のまま特徴を抽出しながら圧縮しLinear化したほうが機械学習に有利…

13『画像の機械学習_NN多項分類』

12×12pixel画像の'B', 'T', 'I'を機械学習で分類するモデルの作成の続きです。convolution(畳込み)はここでは使いません。前回、もとの画像45枚を拡張(augmentation)して270枚の画像を作成しました。それらを(1,144)の数値列として270枚分、(270,144)のnampy…

12『画像の機械学習_データ拡張 (Augmentation)』

元画像(data2)から変換して、①二値化、②水平移動(+2px)、③水平移動(-2px)、④水平(-1px)+垂直(-1px)、⑤水平(+1px)+垂直(+1px)を作る。これによって画像数は6倍に増える(Augmentation)。画像を増やし機械学習に利用する。 ①二値化: aug1=numpy.where(data2>8…

11『画像の機械学習_データ準備』

グレイスケール画像とします。文字の画像を特定するモデルの機械学習をしていきます。何の文字でもよいですが、なんとなく特徴のありそうな”B”, “T”, “I”を用いることとします。適当なソフトでいろいろなフォントのB,T,Iをクリップして、12×12ピクセルにリサ…

10『ニューラルネットワーク多項分類CE』

torch.nnのクロスエントロピー(CE)誤差(torch.nn.CrossEntropyLoss)は、softmax変換前のスカラー(数)を分類の数だけ(ここでは4つ)、正解は正解ラベルの整数をひとつ(実際にはバッチ分を1次元配列(ベクトル)にして[0 0 1 2 …])、与えます。CE誤差はsoftmax変…

9『二項分類でのBCE誤差とCE誤差の学習比較』

二項分類であっても、バイナリクロスエントロピー(BCE)誤差ではなくクロスエントロピー(CE)誤差の式で誤差はだせる。そして、これらは結局同じ式になる。ということは、BCEとCEを誤差に用いる違いは、NNの出力が1値(BCE誤差を用いる場合)なのか、2値(CE誤差…

8『ニューラルネットワーク二項分類BCE』

分類問題ですが二項分類と多項分類があります。二項を多項のひとつと解釈してもコードできますすが、二項の場合は片方を決めるともう片方が決まるという関係性から、より効率的(らしい)誤差関数があります。BCE(バイナリクロスエントロピー)誤差です。二項と…

7『手作業numpyでやった微分とtorch.nnの自動微分による誤差逆伝播』

手作業でやった誤差逆伝播とtorchの自動微分でやった誤差逆伝播が一致することを確認します。誤差逆伝播は、dLoss/dw, dLoss/db (w,b はウェイトパラメータ、バイアスパラメータ)で勾配がでます。この勾配に学習率(learning rate=0.01とか)をかけて、値を更…

6『乱数による初期パラメータ設定とバッチサイズ』

1)モデルの重みとバイアスの初期値はランダムに決められます。これはtorch.nnという機能を用いると裏で処理されてコード上に現れることがありません。手書きのコードでモデルの重みとバイアスを明示的に定義することもできます。(model.fc1.weight = nn.P…

5『誤差逆伝播と偏微分』

(v1, v2, v3)➡(y)という、3 nodesを1 nodeに変換する過程で、このyがモデルの最終出力とします。正解値をtとすると、LossであるMSE(二乗誤差平均)は、(y-t)2乗/1となります。すなわちLoss = (y-t)^2(処理するサンプル1個として、/1となる)。変換が線形であ…

4『ニューラルネットワーク回帰MSE』

いよいよ機械学習の実際に入っていきます。機械学習は、教師あり学習、教師なし学習があって、前者は答え(教師)が予めあります。法則にしたがった解とか、正しい観測に基づいた観測値とかです。それが、スカラー(数)である場合は「回帰」、分類(あり/なしと…

3『音ファイルの構造』

音ファイルのデータ化についてです。soundfileというライブラリをインポートしています。別に用意しておいた音ファイル(.wavファイル)をsoundfile.read文で読み込みます。すると、170762行×2列のnumpyファイルになります。前回、画像を読んだ時もnumpyファイ…

2『カラー画像ファイルの構造』

今回はカラー画像の構造についての資料です。たとえば、90×90ピクセルの画像は、RGBの各々のチャンネルがありますので、(90, 90, 3)のサイズのnumpy行列ファイルとなります。各々の数値は0~255のuint8型(unsigned integer, 0以上の整数値型)となるのは、白…

1『グレイスケール画像ファイルの構造』

さっそく少しずつ始めましょう。 ・画像(予め白黒で96×96ピクセルにしてある)を準備 ・dataという変数にnumpy配列として格納します。要素は0~255の整数値(0が黒、255が白)をとります(data = cv2.imread('image.png', 0)) ・このnumpy配列は、(96, 96)の二…