読者です 読者をやめる 読者になる 読者になる

しいたげられたしいたけ

人権を守るには人権を守るしかない。人権以外の何かを守ることによって人権を守ろうとする試みは経験的に全て失敗している

O'REILLY『ゼロから作るDeep Learning』3章MNIST画像が表示されなかったので改造した on Windows10

またヘンなものを勉強中である。ヘンというのは「またどうせ私にゃモノにならないであろうもの」という意味で、勉強の対象がヘンという意味ではない。

例によって対象がミニマムなので、新着に表示されにくくするため日付をさかのぼって公開しています。自分用のメモと、もし同様のトラブルに悩まされている人が検索で見に来たら、ヒントになればという意図での公開です。つかむしろ「ナニ間違ったことやっとんじゃいボケ!」とお気づきの方がいたら、ぜひご教示願います。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

プラットフォームは Windows10。Python 3 系をインストールして、GIT HUB よりサンプルプログラムをダウンロードして、3章の途中まではサンプルプログラムがサクサク動くことを確認した。

3章P75で、サンプルプログラム ch03\mnist_show.py を実行してMNIST画像を表示させようとしたところで、つまずいた。MNIST画像とはなんぞやということは、拙記事では解説しません。検索して適切な記事をご参照ください。

こんな感じ。私のパソコンは BMPファイルを Windowsフォトビューアーに関連付けています。

f:id:watto:20170224235806p:plain

そこで、1章P19で画像を表示したサンプルプログラム ch01\img_show.py を参考にして、次のように改造してみた。

import sys, os

sys.path.append(os.pardir)
import numpy as np
from dataset.mnist import load_mnist
from PIL import Image


def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)

img = x_train[0]
label = t_train[0]
print(label)

print(img.shape) # (784,)
img = img.reshape(28, 28)
print(img.shape) # (28, 28)

import matplotlib.pyplot as plt
from matplotlib.image import imread

plt.imshow(img)

plt.show()

青文字で表示した部分はサンプルプログラム mnist_show.py 、緑で表示した部分は img_show.py から流用したものである。

実行すると、サイズはでかいがP75の挿し絵と同じと思われる画像が表示された!

f:id:watto:20170224235807p:plain

なお、ソースコード中の赤字で表示した数字 “0” を “1” に変更すると…

f:id:watto:20170224235808p:plain

と表示された。“2”、“3”、“4”、…と変更すると、表示される数字は “4”、“1”、“9”、…と変わった。合ってますか?(誰に訊く?

とかなんとかやった後で、もう一度サンプルプログラム mnist_show.py をもう一度走らせたら…

f:id:watto:20170224235809p:plain

なぜ表示される!? ソースコード変更しないで、そのまま再実行させただけなのに??

エントリーにする前に、手持ちのもう1台のノーパソで同じプログラムを実行して、同じ現象が再現されることを確認した。なんでそうなるかは、今のところ謎である。

スポンサーリンク