2024-06-01から1ヶ月間の記事一覧
花のカラー画像(ひまわり22枚、あさがお28枚、すいせん28枚)を準備し、3チャンネルの96x96ピクセルにして、畳み込み→プーリング→畳み込み→プーリング(*)→畳み込み→プーリング(*)→全結合層→全結合層にて出力し、クロスエントロピー誤差を逆伝播させてパラメ…
オートエンコーダにもいろいろ種類があるようですが、ここでは最もわかりやすそうなシンプルなものをやってみます。単純な画像(構造や特徴が均質である画像)を複数用意し、その画像を畳み込みニューラルネットワーク+全結合層のニューラルネットワークで学…
畳み込み(convolution)は、カーネル(フィルタ)で処理される過程がイメージできますが、逆畳み込み(deconvolution)もしくは転置畳み込み(transposed convolution)は計算の過程をイメージすることがむずかしいと感じてきました。ネットワーク出力(out)に対する…
畳み込みにおいて、カーネル(フィルタ)の枚数、重み、バイアスは具体的にどう計算に利用されているのか?torch.nn.Conv2dを用いると裏で自動的に行われて意識せずともコードがワークし機械学習が進みます。仕組みを知りたかったので、実際の数値を手計算して…
同じ画像データ(12×12)を用いて、NNとCNNによる多項分類('B','T','I'の判定)の学習過程を比較した。誤差はクロスエントロピー誤差、SGD法(学習率0.01)は共通。テストデータは同じものを20サンプル使用した。著しい差とまではいかないが、CNNの方が学習が早く…
いよいよ画像を畳み込みニューラルネットワークでモデルの機械学習を行います。とはいっても、畳み込み(convolution)→プーリングにて画像(行列)のサイズを小さくしておいて、これをLinearにして通常のニューラルネットワークをするということで、畳み込み・…
画像データをニューラルネットワークへ投入する際に、そのまま短冊をつなぎ合わせるように数列化(Linear化)して投入してもよいが、せっかくの2次元のデータの関連性が失われてしまう。2次元のまま特徴を抽出しながら圧縮しLinear化したほうが機械学習に有利…
12×12pixel画像の'B', 'T', 'I'を機械学習で分類するモデルの作成の続きです。convolution(畳込み)はここでは使いません。前回、もとの画像45枚を拡張(augmentation)して270枚の画像を作成しました。それらを(1,144)の数値列として270枚分、(270,144)のnampy…
元画像(data2)から変換して、①二値化、②水平移動(+2px)、③水平移動(-2px)、④水平(-1px)+垂直(-1px)、⑤水平(+1px)+垂直(+1px)を作る。これによって画像数は6倍に増える(Augmentation)。画像を増やし機械学習に利用する。 ①二値化: aug1=numpy.where(data2>8…
グレイスケール画像とします。文字の画像を特定するモデルの機械学習をしていきます。何の文字でもよいですが、なんとなく特徴のありそうな”B”, “T”, “I”を用いることとします。適当なソフトでいろいろなフォントのB,T,Iをクリップして、12×12ピクセルにリサ…
torch.nnのクロスエントロピー(CE)誤差(torch.nn.CrossEntropyLoss)は、softmax変換前のスカラー(数)を分類の数だけ(ここでは4つ)、正解は正解ラベルの整数をひとつ(実際にはバッチ分を1次元配列(ベクトル)にして[0 0 1 2 …])、与えます。CE誤差はsoftmax変…
二項分類であっても、バイナリクロスエントロピー(BCE)誤差ではなくクロスエントロピー(CE)誤差の式で誤差はだせる。そして、これらは結局同じ式になる。ということは、BCEとCEを誤差に用いる違いは、NNの出力が1値(BCE誤差を用いる場合)なのか、2値(CE誤差…
分類問題ですが二項分類と多項分類があります。二項を多項のひとつと解釈してもコードできますすが、二項の場合は片方を決めるともう片方が決まるという関係性から、より効率的(らしい)誤差関数があります。BCE(バイナリクロスエントロピー)誤差です。二項と…
手作業でやった誤差逆伝播とtorchの自動微分でやった誤差逆伝播が一致することを確認します。誤差逆伝播は、dLoss/dw, dLoss/db (w,b はウェイトパラメータ、バイアスパラメータ)で勾配がでます。この勾配に学習率(learning rate=0.01とか)をかけて、値を更…
1)モデルの重みとバイアスの初期値はランダムに決められます。これはtorch.nnという機能を用いると裏で処理されてコード上に現れることがありません。手書きのコードでモデルの重みとバイアスを明示的に定義することもできます。(model.fc1.weight = nn.P…
(v1, v2, v3)➡(y)という、3 nodesを1 nodeに変換する過程で、このyがモデルの最終出力とします。正解値をtとすると、LossであるMSE(二乗誤差平均)は、(y-t)2乗/1となります。すなわちLoss = (y-t)^2(処理するサンプル1個として、/1となる)。変換が線形であ…
いよいよ機械学習の実際に入っていきます。機械学習は、教師あり学習、教師なし学習があって、前者は答え(教師)が予めあります。法則にしたがった解とか、正しい観測に基づいた観測値とかです。それが、スカラー(数)である場合は「回帰」、分類(あり/なしと…
音ファイルのデータ化についてです。soundfileというライブラリをインポートしています。別に用意しておいた音ファイル(.wavファイル)をsoundfile.read文で読み込みます。すると、170762行×2列のnumpyファイルになります。前回、画像を読んだ時もnumpyファイ…
今回はカラー画像の構造についての資料です。たとえば、90×90ピクセルの画像は、RGBの各々のチャンネルがありますので、(90, 90, 3)のサイズのnumpy行列ファイルとなります。各々の数値は0~255のuint8型(unsigned integer, 0以上の整数値型)となるのは、白…
さっそく少しずつ始めましょう。 ・画像(予め白黒で96×96ピクセルにしてある)を準備 ・dataという変数にnumpy配列として格納します。要素は0~255の整数値(0が黒、255が白)をとります(data = cv2.imread('image.png', 0)) ・このnumpy配列は、(96, 96)の二…