質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

cifar10のデータセットの読み込みかたについて。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,148

score 341

cifar10のデータセットの読み込みかたについて。

私は「直感Deep Learning」という本を元に勉強を進めているのですが、分からないところがあり質問させていただきました。
それはcifar10のデータセットの読み込みかたについてです。

このgithubのコードのうち、CIFAR10Datasetというクラスがあります。

class CIFAR10Dataset():

    def __init__(self):
        self.image_shape = (32, 32, 3)
        self.num_classes = 10

    def get_batch(self):
        (x_train, y_train), (x_test, y_test) = cifar10.load_data()

        x_train, x_test = [self.preprocess(d) for d in [x_train, x_test]]
        y_train, y_test = [self.preprocess(d, label_data=True) for d in
                           [y_train, y_test]]

        return x_train, y_train, x_test, y_test

    def preprocess(self, data, label_data=False):
        if label_data:
            # convert class vectors to binary class matrices
            data = keras.utils.to_categorical(data, self.num_classes)
        else:
            data = data.astype("float32")
            data /= 255  # convert the value to 0~1 scale
            shape = (data.shape[0],) + self.image_shape  # add dataset length
            data = data.reshape(shape)

        return data


この中のpreprocessという関数で

shape = (data.shape[0],) + self.image_shape  # add dataset length


という文があるのですが、なぜこんなことをしているのかがわかりません。

引数で渡されるdataはすでに(32, 32, 3)の形状を持つデータを二つ(x_train, x_testのこと)持つリストのはずですし、ならばdata.shape[0]は2をさすはずで、それに(32, 32, 3)を入れる?などと考えてしまいます。

コードには# add dataset lengthなどと書かれていますが、何をいいたいのかさっぱりです。

なぜこんなことをしているのか・・・どなたか説明していただけないでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

cifar10 のデータセットは
(データ数, 3072)
の配列で提供されておりますので

shape = (data.shape[0],) + self.image_shape  # add dataset length


によってshape の値
(データ数,32,32,3)
を得ることができますので、この値でもとのデータをreshape()しているだけかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/21 17:20

    回答ありがとうございます!
    少し精神的疲れがあったもので、返信遅れてすいません・・・

    なるほど・・・cifar10のデータの形が配列だったとは盲点でした。
    データ自体をよく調べれば、質問せずとも解決できたことですね。今度からそういったこともきちんと確認していきたいと思います!!
    簡潔な説明できちんと理解することができました!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る