Jupyter Notebook を使ってデモするときに備えて、そのセットアップと画像の取り扱いを調べた。
環境は以下の通り。
$ python3 --version
Python 3.9.2.
仮想環境をつくる。
$ python3 -m venv ./jupyter-notebook
$ source ./jupyter-notebook
(jupyter-notebook) $
肝心の Jupyter Notebook を入れる。
インストール詳細はこちら: https://jupyter.org/install
(jupyter-notebook) $ pip install notebook
必要なモジュールを入れる。
(jupyter-notebook) $ pip install tensorflow==2.13.0 pillow==10.0.0
Macbook Air Intel で作業したのですが、上記コマンドはエラーになり、use --use-feature=2020-resolver と言われた。 素直に --use-feature=2020-resolver 指定してインストールしたらうまくいきました。
Jupyter Notebook を起動する。
(jupyter-notebook) $ jupyter notebook
あとは、ブラウザが起動して Jupyter Notebook 画面が出ます。New → Notebook を選択して、Notebook ページに移動。
まずは、tf.keras.datasets.minst.load_data() を使って MNIST データを入手。
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train.shape
このコードを評価する。(Ctrl+Enter)
(60000, 28, 28)
と出力されます。
以下を評価すると、先頭画像データ (28,28) のテンソルが出力されます。
x_train[0]
このテンソルを PIL で画像に変換すれば(元に戻すというべきか)よいのか?
from PIL import Image
def toImage(imgTensor):
img_size_x = imgTensor.shape[0]
img_size_y = imgTensor.shape[1]
img = Image.new('L', (img_size_x, img_size_y))
for yIndex in range(img_size_y):
for xIndex in range(img_size_x):
value = imgTensor[yIndex][xIndex]
img.putpixel((xIndex, yIndex), int(value))
return img
このエントリーで以前書いたコードを手直ししただけ。
あとは、この toImage 関数を使って PIL の Image インスタンスを・・・評価するだけ?!でなんと表示できました。
この例では、1000番目の訓練データの画像を見てみます。
img = toImage(x_train[1000])
img
今回書いたコード全体を掲載します。
import tensorflow as tf
from PIL import Image
def toImage(imgTensor):
img_size_x = imgTensor.shape[0]
img_size_y = imgTensor.shape[1]
img = Image.new('L', (img_size_x, img_size_y))
for yIndex in range(img_size_y):
for xIndex in range(img_size_x):
value = imgTensor[yIndex][xIndex]
img.putpixel((xIndex, yIndex), int(value))
return img
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
img = toImage(x_train[1000])
img
以上です。