Python

PyTorchで手書き数字MNISTを画像分類する【LeNet5】ソースコード付き

PyTorchで手書き数字(MNIST)を画像分類するソースコードです。MNISTは学習データ5万枚、テストデータ1万枚の合計6万枚の手書き数字で構成されています。モデルはLeNetを少しいじったものを使用しました。まずはmain関数があるmain.pyファイルを作成します。最初はMNISTデータをダウンロードするためdownload=Trueとしましたが、2回目からはdownload=Falseとしてください。
Python

【PyTorch】分類結果を表で可視化する – confusion_matrixの作成

PyTorchでニューラルネットワークを作成、画像分類したときの結果を表にする方法です。例えばCIFA10を認識させたときに、ネコの画像を正しくネコと認識できた回数、間違えてイヌと認識してしまった回数...を画面上に表示させます。ネコの画像はイヌの画像に似てるから誤認識しやすい、逆にネコは飛行機に似てないから飛行機とは認識されづらい、といった分析が可能になります。
Python

【PyTorch】重みの分布を可視化する – matplotlibでヒストグラムの作成

例えば、PyTorchで下記のようなネットワークモデルを作成し、その重みの値をグラフにプロットすることを考えます。以下の関数を作成し、学習後にmain.py内で関数を呼び出します。今回は9層からなるモデルだったため縦3つ×横3つのヒストグラムを作成します。features.0.weightが第1層目の重みを表します。features.0.biasとするとバイアスを取り出すことができます。
Python

【PyTorch】2値化ニューラルネットワークで認識精度を上げる – 重み更新のアルゴリズム

重みを更新するとき、量子化された重みを誤差逆伝搬のときに更新していました。W ← W_org - δ×∂L/∂W ここのW_orgが量子化された数値(2値化では-1,+1)でした。W_orgを量子化前の浮動小数点精度に変更することで精度が向上します。PyTorchで実装するには、まず重みを量子化する前に浮動小数点精度の重みを保持しておきます。順伝搬は量子化後の値で積和演算します。
Python

【PyTorch】入力・重みを量子化する – Binarized Neural Network 畳み込み層・全結合層をカスタマイズ

ニューラルネットワークの入力xに自作の関数を適応する方法を紹介します。ライブラリはPyTorchです。入力xや重みwを量子化することで画像分類や物体検知を効率化する研究が行われています。以前書いた記事では重みweightを2値に量子化する方法を説明しましたが今回は重みに加え、入力inputも量子化する方法を解説します。
Python

【PyTorch】Paddingのカスタマイズ – ConstantPad2dとは?パディングで0以外の数字を使いたい

PyTorchのデフォルトではpadding処理は0を加えることになっています。実験で0以外の数値を使いたい場合はnn.ConstantPad2d()を使います。第1引数にパディングするピクセル数、第2引数にパディングの数値を記述します。例えば、入力画像の上下左右1ピクセルを0でパディングしたいときはnn.ConstantPad2d(1,0)とします。
Python

【PyTorch】バイアスBiasの値を書き換える 自作畳み込み層・全結合層

前回の記事では畳み込み層および全結合層の重みを+1,-1の2値に量子化する方法を紹介しました。今回は線形結合のバイアスを操作する方法を紹介します。バイアスを整数に丸める処理を加えたと思います。modelus.pyに畳み込み層を記述していきます。
Python

【PyTorch】重みWightを操作する 自作畳み込み層・全結合層

ニューラルネットワークの量子化をするとき、畳み込み層や全結合層で積和演算に用いる重み(weight)に量子化処理を加えたいです。最近では量子化の中でも-1と+1に量子化する2値化ニューラルネットワーク(Binary Neural Network)の研究が行われています。とりあえず重みを量子化したいのでカスタム畳み込み層を作成します。Convolution、Linearクラスで実装できますが、具体的な方法を紹介します。まずmodule.pyに2値化関数Binarize()をつくります。
Python

PyTorchでバッチ正規化をカスタマイズする batch_norm()の使い方

PyTorchでバッチ正規化の中身を書き換える方法を紹介します。バッチ正規化のパラメータは入力、重み、バイアス、平均、分散(ルートを取るので標準偏差)、ε(ゼロ除算を避けるためのごく小さい値)です。ここでself.running_meanが移動平均、self.running_varが移動分散にあたります。学習時、バッチごとに入力の平均を取りますが推論時には入力データは画像1枚なので平均が取れません。そこで移動平均を使います。なのでself.running_meanという名前です。分散も同様に、学習時はバッチごとの分散を求めていますが、推論では移動分散を用います(self.running_var)。
パソコン

Windows10初期化後のセットアップ画面でシャットダウンする【メルカリ出品】

自宅のPCをメルカリのような中古販売サイトに出品するとき、ハードディスク内の個人情報保護のために初期化(リカバリ)すると思います。初期化すると工場出荷状態に戻ります。セットアップ開始の画面に遷移し、指示の通りに進めると、Microsoftアカウントを作成するよう誘導されます。セットアップ完了後、PCが使える状態になるまで進んでしまいます。家電量販店などで新品のパソコンを購入し、初めて電源を付けるとセットアップが始まります。
タイトルとURLをコピーしました