次回より『ヒデログ』とご検索ください

【Python入門】Kerasのデータセット全7つの使い方を一覧で紹介

keras

Kerasで利用できるデータセットの一覧と解説をまとめました。Kerasのページをデータの内容を見ながらより詳しくまとめたものになります。

この記事を読むと分かる事

  • Kerasのインストール方法
  • Kerasの全7つのデータセットの取得方法
  • Kerasの全7つのデータセットの引数の設定方法
  • Kerasの全7つのデータセットの中のデータ

Kerasとは?

主にTensorflowのDeeplearning用のラッパーライブラリです。Tensorflowを使うよりKerasを使った方がより簡単にディープラーニングのモデルを作成することができるライブラリになっています。

Kerasのインストールの方法

!pip install keras
//GPU版
!pip install keras-gpu

でインストールできます。

Anacondaの場合

Anacondaを使用している人はGUIからインストールすることができます。

CPU版は赤枠のkerasからGPU版は青枠のkeras-gpuを選択してインストールしてください。
keras
CUIの場合は、

conda install keras
//GPU版
conda install keras-gpu

でインストールできます。

Kerasのデータセット一覧

さて、それでは本題のKerasで使用できるデータセットの一覧を解説します。

CIFAR10 画像分類

from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
# (50000, 32, 32, 3)
# (10000, 32, 32, 3)
# (50000, 1)
# (10000, 1)

print(min(y_train),max(y_train))
# [0] [9]
# ラベルが10個あることを表している

cifar10.load_data()の戻り値は2つのタプル。なので、(x_train, y_train), (x_test, y_test)が戻り値となっている。

  • (x_train, y_train):訓練用データセット
    • x_train:訓練用の画像データ
    • y_train:訓練用の画像ラベル
  • (x_test, y_test):テスト用データセット
    • x_test:テスト用の画像データ
    • y_test:テスト用の画像ラベル

以下、他のデータセットも同様になります。

CIFAR10の画像一部

CIFAR10の画像の一部です。32ピクセルx32ピクセルの画像なので目視では小さい画像になります。
cifar10

CIFAR100 画像分類

基本構造はcifar10と同じで50,000枚の訓練画像と10,000枚のテスト用データセットです。

違いはラベルが10→100になっている点です。

from keras.datasets import cifar100
(x_train, y_train), (x_test, y_test) = cifar100.load_data(label_mode='fine')

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
# (50000, 32, 32, 3)
# (10000, 32, 32, 3)
# (50000, 1)
# (10000, 1)

print(min(y_train),max(y_train))
# [0] [99]
# ラベルが100個あることを表している

引数にはfine,coarseがあり、Kerasの公式サイトでは違いは記載されていないが、単語からfine:鮮明、coarse:粗いと思われる。

ただ、画像を目視した限りでは、差はなく、また、サンプルで画像の数値データの差分をとっても差はゼロだったので同じデータと考えていいだろう。

label_mode='fine'cifar100_fine
label_mode='coarse'cifar100_coarse

IMDB映画レビュー感情分類(分類問題)

25,000個のエンコードされた映画レビューとその賛否のデータセット。単語のラベルは頻出が数字としてインデックスされている。訓練データ、テストデータそれぞれ25,000個ずつある。

from keras.datasets import imdb
(x_train, y_train), (x_test, y_test) = imdb.load_data(path="imdb.npz",
                                                      num_words=None,
                                                      skip_top=0,
                                                      maxlen=None,
                                                      seed=113,
                                                      start_char=1,
                                                      oov_char=2,
                                                      index_from=3)

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

# (25000,)
# (25000,)
# (25000,)
# (25000,)

print(y_train[0],y_train[1],y_train[2])
# 1 0 0

引数

特段の事情がない限り、基本的には引数を個別に設定する必要はない。計算時間の短縮や外れ値等を意図的に除いて実験したいなど、使用目的に応じて時には引数で設定できる。以下に引数の説明を記します。

  • oov_char:他の引数での例外に対応する値になる
  • num_words指定した数値の頻出上位が対象となり、それ以下はoov_charの数字になる→つまり、num_words=100に設定した場合、頻出200位はoov_charの値になる
  • skip_top指定した数値の頻出下位が対象となり、それ以上はoov_charの数字になる→つまり、skip_top=100に設定した場合、頻出50位はoov_charの値になる
  • maxlen:最大の文字数列、指定値以上の文字数を持つデータは無視される
  • seed:シード値
  • start_char:初めの単語のデータ数値に対応
  • index_from:インデックスはここで設定した値以上になる

start_charoov_charindex_fromは互いに関連していて、設定値で並べると1,2,3になる。これは最初の文字データのインデックスは1で、例外は2に、その他の文字は3以上になるという関係になっている。

引数を設定した例

10,000位以上、10位以下の頻出語の文章(条件から外れるものは全て「2」になる)で、文字列の最大長を100に設定した場合

from keras.datasets import imdb

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=10000,
                                                      skip_top=10,
                                                      maxlen=100)

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

# (5736,)
# (5736,)
# (0,)
# (0,)

最大長(max_len)を100に設定すると訓練データは5,736で、テストデータは0になってしまう。

ロイターのニュースワイヤー トピックス分類

from keras.datasets import reuters
(x_train, y_train), (x_test, y_test) = reuters.load_data(path="reuters.npz",
                                                         num_words=None,
                                                         skip_top=0,
                                                         maxlen=None,
                                                         test_split=0.2,
                                                         seed=113,
                                                         start_char=1,
                                                         oov_char=2,
                                                         index_from=3)

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
# (8982,)
# (8982,)
# (2246,)
# (2246,)

print(y_train[0],y_train[1],y_train[2])
# 3 4 3

ロイターのニュースワイヤーデータセットで46のトピックにラベル付けされている。訓練用データに8,982個、テスト用データセットに2,246個ある。

引数は上記「IMDB映画レビュー感情分類」と同じ。

MNIST 手書き数字データベース

60,000枚の訓練用画像データとラベル、10,000枚のテスト用画像データとラベルです。画像は0~9の数値の画像で10クラスの画像分類です。

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

# (60000, 28, 28)
# (60000,)
# (10000, 28, 28)
# (10000,)

print(y_train[0],y_train[1],y_train[2])
# 5 0 4
# one-hot表現ではなく、ラベル

他と同様、訓練データセットとテストデータセットを2つのタプル型で返す。データセットは画像とラベルで、画像データは28×28ピクセルの画像で、ラベルデータは0~9の数字を返す。

  • x_train, x_test:28×28ピクセルの数字の白黒画像データ
  • y_train, y_test:0~9のラベル

数字の画像:28×28ピクセルの画像
mnist

Fashion-MNIST ファッション記事データベース

60,000枚の訓練用画像データとラベル、10,000枚のテスト用画像データとラベルです。画像はファッション画像での画像の分類は10クラスです。

from keras.datasets import fashion_mnist

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

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

# (60000, 28, 28)
# (60000,)
# (10000, 28, 28)
# (10000,)
ラベル 説明
0 Tシャツ/トップス
1 ズボン
2 プルオーバー
3 ドレス
4 コート
5 サンダル
6 シャツ
7 スニーカー
8 バッグ
9 アンクルブーツ
  • (x_train, x_test):28×28ピクセルの数字のファッション画像データ
  • (y_train, y_test):0~9のラベル

fashion_mnist

ボストンの住宅価格回帰データセット

from keras.datasets import boston_housing
(x_train, y_train), (x_test, y_test) = boston_housing.load_data(test_split=0.2)

x_train[0]
# array([1.23247, 0. ,8.14, 0., 0.538, 6.142, 91.7, 3.9769, 4., 307., 21., 396.9, 18.72])
y_train[0]
# 15.2

・x_train

説明変数 内容
CRIM per capita crime rate by town
犯罪発生率(人口単位)
ZN proportion of residential land zoned for lots over 25,000 sq.ft.
25,000平方フィート以上の住宅区画の割合
INDUS proportion of non-retail business acres per town
非小売業の土地面積の割合(人口単位)
CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
チャールズ川沿いかどうか(チャールズ川沿いの場合は1、そうでない場合は0)
NOX nitric oxides concentration (parts per 10 million)
窒素酸化物の濃度(pphm単位)
RM average number of rooms per dwelling
1戸あたりの平均部屋数
AGE proportion of owner-occupied units built prior to 1940
1940年よりも前に建てられた家屋の割合
DIS weighted distances to five Boston employment centres
ボストンの主な5つの雇用圏までの重み付きの距離
RAD index of accessibility to radial highways
幹線道路へのアクセス指数
TAX full-value property-tax rate per $10,000
10,000ドルあたりの所得税率
PTRATIO pupil-teacher ratio by town
教師あたりの生徒の数(人口単位)
B 1000(Bk – 0.63)^2 where Bk is the proportion of blacks by town
1000(Bk-0.63)^2として計算:Bkがアフリカ系アメリカ人居住者の割合(人口単位)
LSTAT % lower status of the population
低所得者の割合

・y_train

目的変数 内容
MEDV Median value of owner-occupied homes in $1000’s
住宅価格の中央値(単位1,000ドル)

Carnegie Mellon University


x軸:住宅価格の中央値、y軸:犯罪発生率の散布図になってます。住宅価格が上がるにつれて犯罪率が下がっていることが分かる。これは1変数に対する回帰での見方だが、多変数回帰を行うことができる。

引数

test_split:テスト用データの割合

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です