ChainerでCIFAR-10を読み込んで画像を見てみた。


2017年 05月 01日

ChainerでCIFAR-10を直接読み込むことが、MNISTと同じようにできるのがわかったの、早速試してみた。
>>> import numpy as np
>>> import chainer
>>> (train, test) = chainer.datasets.get_cifar10()
>>> len(train)
50000
>>> train[0]
(array([[[ 0.23137257,  0.16862746,  0.19607845, ...,  0.61960787,
0.59607846,  0.58039218],
[ 0.0627451 ,  0.        ,  0.07058824, ...,  0.48235297,

 .................  中略 ................

 [ 0.45490199, 0.36862746, 0.34117648, ..., 0.54901963, 0.32941177, 0.28235295]]], dtype=float32), 6) >>> train[0][0].shape (3, 32, 32) >>> type(train[0][0]) <class 'numpy.ndarray'> >>> type(train[0][0][0][0][0]) <class 'numpy.float32'> >>> type(train[0][1]) <class 'numpy.int32'>
>>> [train[i][1] for i in range(30)]
[6, 9, 9, 4, 1, 1, 2, 7, 8, 3, 4, 7, 7, 2, 9, 9, 9, 3, 2, 6, 4, 3, 6, 6, 2, 6, 3, 5, 4, 0]
>>>
これから、trainは50000個の要素が詰まっていて、各要素は、(イメージ,クラス)の形になっていて、画像データは、numpy.float32の3x32x32配列であることが分かる。

これだけ分かれば、画像を表示して確認できるので、やってみた。

CIFAR-10-9x12.png プログラムは、MNISTの時とほとんど同じである。

import chainer
import matplotlib.pyplot as plt
import numpy as np

(train, test) = chainer.datasets.get_cifar10()

fig,ax = plt.subplots(nrows=9,ncols=12,sharex=True,sharey=True)
ax = ax.flatten()
for i in range(108):
img = train[i][0]
newimg = np.dstack((img[0],img[1],img[2]))
ax[i].imshow(newimg,interpolation='none')

ax[0].set_xticks([])
ax[0].set_yticks([])
plt.tight_layout()
plt.savefig("CIFAR-10-9x12.png")
plt.show()
次回からは、CIFER-10の画像データセットを使って Deep Learning をやってみよう。