プログラミング | 日々、学ぶ https://take-tech-engineer.com Study Life Mon, 03 Jan 2022 09:22:04 +0000 ja hourly 1 https://wordpress.org/?v=5.8.2 https://take-tech-engineer.com/wp-content/uploads/2021/12/cropped-DSCF4956-scaled-1-32x32.jpg プログラミング | 日々、学ぶ https://take-tech-engineer.com 32 32 クラスごとの画像を簡単に見てみよう!IPyPlotの利用 https://take-tech-engineer.com/ipysplot-mnist/ https://take-tech-engineer.com/ipysplot-mnist/#respond Mon, 03 Jan 2022 09:22:02 +0000 https://take-tech-engineer.com/?p=88

はじめに

画像分類を行う際に、どのような特徴量や機械学習の手法を用いるかアイディアを膨らませるために、目視で画像を確認することがあります。Pythonのを利用する場合は、matplotlibライブラリで表示させるのが一般的です。しかし、インタラクティブなNotebookインターフェースの場合、膨大な数の画像をを表示させようとすると、実行⇄表示を繰り返す必要がり、非常にストレスが溜まります。そこで、この記事では、IPyPlotを活用した、誰でも簡単かつNotebookインターフェースでの快適な画像表示について紹介します。

IPyPlotを利用したコードの紹介

実行環境:Google Colaboratoory  2022/1/3

GitHubのREADME.mdを参考にコードを記載していきます。まず、Google ColabにIPyPlotをインストールします。

!pip install ipyplot

次に、IPyPlotをインポートします。また、この記事では例としてCIFAR10の画像を用いますので、kerasのデータセットをインポートします。

import ipyplot
from keras.datasets import cifar10

サンプルで利用するCIFAR10データセットは、60,000枚の32×32ピクセルのカラーの画像データで、1クラス6,000枚のデータで構成されています。また、それを分類する10個のラベル「飛行機、自動車、鳥、猫、鹿、犬、蛙、馬、船、トラック」で構成されています。CIFAR10をダウンロードするために、以下コードを実行します。

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

x_trainには、5,000枚の画像が、y_trainには、5,000のラベルが保存されています。これらを、IPyPlotライブラリを活用して、ラベルごとに画像を表示させます。ipyplot.plot_class_tabsに、画像データとラベルを渡すだけなので、非常に簡単です。max_imgs_per_tabは、クラスごとの最大画像表示数になります。こちらのデフォルト値は30のため、適宜修正が必要です。さすがに、全ての画像を表示すると時間がかかるため、ここでは100を設定します。

ipyplot.plot_class_tabs(x_train, y_train.flatten(), max_imgs_per_tab=100)

全体コード

前章の全コードです。こちらをGoogle Colabにコピペすれば、動作しますので活用ください。

!pip install ipyplot

import ipyplot
from keras.datasets import cifar10

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

ipyplot.plot_class_tabs(x_train, y_train.flatten(), max_imgs_per_tab=100)

参考資料

・IPyPlot
https://github.com/karolzak/ipyplot

・The CIFAR-10 dataset
https://www.cs.toronto.edu/~kriz/cifar.html

・Keras データセット CIFAR10画像分類
https://keras.io/ja/datasets/

]]>
https://take-tech-engineer.com/ipysplot-mnist/feed/ 0
【変数インスペクタ】Google Colabで、変数の型/形状を楽に確認 https://take-tech-engineer.com/google-colab-variable-inspector/ https://take-tech-engineer.com/google-colab-variable-inspector/#respond Sat, 01 Jan 2022 12:51:12 +0000 https://take-tech-engineer.com/?p=80 Google Colabでは、変数の型を確認するためには、print文を打って確認する必要があり、やや不便でした。しかし、最近のアップデートで変数インスペクタが実装され、楽に変数の型と形状が確認できるようになりました。
下記、画像の左側にある{x}をクリックすると変数インスペクタが表示され、変数の型と形状が確認できます。

]]>
https://take-tech-engineer.com/google-colab-variable-inspector/feed/ 0
完全固定!PyTorchの乱数シード https://take-tech-engineer.com/pytorch-randam-seed-fix/ https://take-tech-engineer.com/pytorch-randam-seed-fix/#respond Fri, 31 Dec 2021 12:54:26 +0000 https://take-tech-engineer.com/?p=75 機械学習では、再現性を持たせるために乱数シードを固定することが多いと思います。しかし、PyTorchを使っていると、固定しているつもりでも、なかなか出来ていない事が多いです。これは、PyTorchに関連するライブラリが多い事と、GPUのdeterministicを有効化する必要があるからです。この記事では、その固定方法についてのコードを紹介します。

PyTorchの乱数シード固定方法

PyTorch OfficialのREPRODUCIBILITYのページを参考に、Python、Numpy、PyTorchそれぞれの乱数ジェネレータを固定しないといけないことが分かります。また、nondeterministic algorithmsをしないように設定する必要があります。それらのコードを固定したコードは以下になります。

import random
import numpy as np
import torch

def torch_fix_seed(seed=42):
    # Python random
    random.seed(seed)
    # Numpy
    np.random.seed(seed)
    # Pytorch
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.backends.cudnn.deterministic = True
    torch.use_deterministic_algorithms = True


torch_fix_seed()

GPU(deterministic)を有効にすると、再現性はあがるが、処理パフォーマンスが低下するので注意が必要のようです。

参考情報

REPRODUCIBILITY(PyTorch Official)
https://pytorch.org/docs/stable/notes/randomness.html

機械学習におけるランダムシードの研究
https://qiita.com/si1242/items/d2f9195c08826d87d6ad

最短コースでわかる PyTorch &深層学習プログラミング(赤石 雅典)

PyTorchの基本的なプログラミングについて非常に分かりやすく書かれており、オススメです。乱数固定についてはp.352に書かれています。

]]>
https://take-tech-engineer.com/pytorch-randam-seed-fix/feed/ 0
Docker Desktop for WindowsのインストールとJupyterLabの起動 https://take-tech-engineer.com/docker-desktop-for-windows/ https://take-tech-engineer.com/docker-desktop-for-windows/#respond Fri, 31 Dec 2021 12:19:35 +0000 https://take-tech-engineer.com/?p=72

はじめに

Windows10にDocker Desktop for Windows(Hyper-V)をインストールし、JupyterLabを起動するまでをまとめました。

デバイスの仕様とDocker Desktopのシステム要件

デバイスの仕様

  • OS:Windows10 Pro
  • プロセッサ:AMD Ryzen 9 4900HS with Radeon Graphics 3.00 GHz
  • 実装RAM:16.0GB
  • システムの種類:64 ビット オペレーティング システム、x64 ベース プロセッサ

上記仕様のデバイスにDocker Desktop for Windowsをインストールしていきます。
Docker Desktopのシステム要件は下記です。

Docker Desktop(Hyper-V)のシステム要件

  • OS:Windows 10 64-bit: Pro 2004 (build 19041) or higher, or Enterprise or Education 1909 (build 18363) or higher. ※Windows 10/11 Homeの場合は、WSL2を使う必要があります。
  • Hyper-Vの有効化
  • プロセッサ:64 bit processor
  • 実装RAM:4GB

Hyper-Vの有効化

Docker Desktop for WindowsはHyper-Vを使用するので、有効化します。
※上記、システム要件にあるように、Windows Homeでは使えないため注意ください。Homeの場合は、WSL 2 backendで使うことで使用できるようになります。

  • コントロールパネルを開き、「プログラムと機能」をクリックします。下記画像赤枠の「Windowsの機能の有効化または無効化」をクリックします。

「Hyper-V」にチェックを入れ、OKをクリックします。Hyper-Vが有効化されるにはWindowsの再起動が必要なため、再起動を行います。

Docker Desktop for Windows のインストール

下記サイトの「Download for Windows」をクリックし、インストーラーをダウンロードします。
https://www.docker.com/products/docker-desktop

ダウンロードした「Docker Desktop Installer.exe」を実行し、インストールを進めて行きます。今回、WSL2は使わないので、「Install required Windows components for WSL2」のチェックボックスを外しても構いません。

Docker Desktopのアプリを起動すると、「タスクバー」の右端にある「通知領域」にDockerのアイコンが表示されます。このアイコンが表示されていればDocker Desktopが無事起動できているはずです。

  • 念の為、「Windows PowerShell」でdockerコマンドが使えるか確認します。Windows PowerShellで「docker version」を実行すれば、バージョンが確認できます。下記のように表示されれば、正しく動作しています。※dockerコマンドは、Docker Desktopの起動中のみ使えます。dockerコマンドが使えない場合は、Docker Desktopが起動しているか確認してみてください。
docker version

Client:
 Cloud integration: 1.0.17
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:58:50 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:52:31 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

JupyterLabが使えるコンテナの起動

ここから、JupyterLabが使えるコンテナの起動を行います。まず、「タスクバー」の右端にある「通知領域」のDockerのアイコンを右クリックして、Dashboardをクリックします。現在、コンテナは起動していないため、下記画像のように「No containers running」と表示されるはずです。

Windows PowerShellを起動し、下記コマンドを実行します。jupyter公式でdockerイメージを配布しているため、簡単にコンテナを起動させることができます。

docker run -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes jupyter/scipy-notebook:33add21fab64

PowerShellに以下が出力されるので、token「xxxxxxxxxxxxxxxxxxxx」の部分をコピーしておきます。

Or copy and paste one of these URLs:
        http://75a6e9fac17d:8888/lab?token=xxxxxxxxxxxxxxxxxxxx
  • Docker DesktopのDashboardを見ると、コンテナが起動していることが確認できます。今回は「gallant_ganguly」となっていますが、run時に名前を指定しないとランダムに名前が決められるので、同じ名前にはならないはずです。
  • コンテナ部分にカーソルを合わせると「OPEN IN BROWSER」が表示されるので、クリックします。

ログインにはtokenが求められますので、先程コピーしたtokenを貼り付けてログインします。

無事に、jupyterLabにログインできました。

参考資料

]]>
https://take-tech-engineer.com/docker-desktop-for-windows/feed/ 0
matplotlibを一瞬で日本語表示対応させよう! https://take-tech-engineer.com/matplotlib-japanese/ https://take-tech-engineer.com/matplotlib-japanese/#respond Thu, 30 Dec 2021 12:43:37 +0000 https://take-tech-engineer.com/?p=60

matplotlibの日本語文字化けについて

matplotlibは、標準で日本語に対応しておらず、日本語を使用すると文字化けが発生し、正しく表示されません。例えば、以下のコードをGoogle Colabで実行すると、□□と表示されてしまい文字化けしてしまいます。ここでは、誰でも簡単に日本語表示できる方法を紹介します。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])
plt.xlabel('縦軸')
plt.ylabel('横軸')
plt.show()

japanize-matplotlibによる日本語表示対応

japanize-matplotlibを利用することで、日本語表示対応できます。pipコマンドでインストールし、importするだけなので、簡単にすぐ使うことができます。

以下、コードで正しく日本語表示されるか確認します。

!pip install japanize_matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib

plt.plot([1, 2, 3, 4])
plt.xlabel('縦軸')
plt.ylabel('横軸')
plt.show()

正しく、日本語が表示されていることが確認できました。

]]>
https://take-tech-engineer.com/matplotlib-japanese/feed/ 0