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

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

ただいまの
回答率

88.92%

cifar10のデータセット作成時のエラーメッセージについて

解決済

回答 1

投稿 編集

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

trafalbad

score 249

cifar10のデータセットを作成しようとしたとこを下記のエラーが出てしましいました。unpickle()でファイルを読み込んでいます。

def unpickle(file):
    fo = open(file, 'rb')
    dict = cPickle.load(fo)
    fo.close()
    return dict

どのようにすればいいのでしょうか?

X_train = np.empty((0,32*32*3))
y_train = np.empty(1)
for i in range(1,6):
    data_dict = unpickle("data_batch_1".format(i))
    if i == 1:
        X_train = data_dict['data']
        y_train = data_dict['labels']
    else:
        X_train = np.vstack((X_train, data_dict['data']))
        y_train = np.hstack((y_train, data_dict['labels']))

data_dict = unpickle('test_batch')
X_test = data_dict['data']
y_test = np.array(data_dict['labels'])

bm = unpickle('batches.meta')
label_names = bm['label_names']
#エラーメッセージ
TypeError                                 Traceback (most recent call last)
<ipython-input-9-f0302af1121f> in <module>()
      6     data_dict = unpickle("data_batch_1".format(i))
      7     if i == 1:
----> 8         X_train = data_dict['data']
      9         y_train = data_dict['labels']
     10     else:

TypeError: 'type' object is not subscriptable
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2017/05/29 11:51

    unpickle()とは何でしょうか?

    キャンセル

  • trafalbad

    2017/05/29 12:34 編集

    cifar10のデータセットを読み込む関数です。別のところで定義してありますが、unpickel化してデータを読み込むためのものです。引数にはファイル名が入ります。

    キャンセル

回答 1

checkベストアンサー

0

unpicle関数内の変数dictがPythonの組込型名dictと同一のためにエラーが発生したようです。

参考:TypeError: 'type' object is not subscriptable when indexing in to a dictionary

dictdなどの別の変数名に変更すると解決すると思います。
ただ、こちらの環境python2.7ではdictでも問題なく動作しましたが。

なおdata_dict = unpickle("data_batch_1".format(i))は意図しない動作をすると思いますが、指摘のみ。

import cPickle
import numpy as np

def unpickle(file):
    fo = open(file, 'rb')
    #dict = cPickle.load(fo)
    d = cPickle.load(fo)
    fo.close()
    #return dict
    return d

X_train = np.empty((0,32*32*3))
y_train = np.empty(1)
for i in range(1,6):
    #fname = "data_batch_{0}".format(i)
    fname = "data_batch_1".format(i)
    print(fname)
    data_dict = unpickle(fname)
    if i == 1:
        X_train = data_dict['data']
        y_train = data_dict['labels']
    else:
        X_train = np.vstack((X_train, data_dict['data']))
        y_train = np.hstack((y_train, data_dict['labels']))
print(X_train)
print(y_train)
data_batch_1
data_batch_1
data_batch_1
data_batch_1
data_batch_1
[[ 59  43  50 ..., 140  84  72]
 [154 126 105 ..., 139 142 144]
 [255 253 253 ...,  83  83  84]
 ..., 
 [ 71  60  74 ...,  68  69  68]
 [250 254 211 ..., 215 255 254]
 [ 62  61  60 ..., 130 130 131]]
[6 9 9 ..., 1 1 5]

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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