前提・実現したいこと
txtファイルを読み込んで辞書型に格納する関数です。
発生している問題・エラーメッセージ
要素[0]で範囲外とエラーが出ました。
IndexError Traceback (most recent call last) <ipython-input-30-8f3a925c59a3> in <module> 24 25 #トレーニングデータのキャプションと画像名を紐付ける ---> 26 train_imagecaptions_dict = make_imagecaptions_dictionary('caption_mold.txt', train) 27 #バリデーションデータのキャプションと画像名を紐付ける 28 val_imagecaptions_dict = make_imagecaptions_dictionary('caption_mold.txt', val) <ipython-input-30-8f3a925c59a3> in make_imagecaptions_dictionary(filename, setname) 10 word = line.split() 11 #最初の単語を画像名、残り全てをキャプションとして読み込む ---> 12 image_id = word[0] 13 image_sentence = word[1:] 14 #画像名がデータセット中に含まれていれば以下を実行 IndexError: list index out of range
該当のソースコード
#画像名とキャプションを紐付けたディクショナリを作成する関数 def make_imagecaptions_dictionary(filename,setname):#引数datasetはtrainとかvalとか text = load_file(filename) #辞書型作成 imagecaptions = {} #1行ずつ取り出してループ word = [] for line in text.split('\n'): #空白で区切る word = line.split() #最初の単語を画像名、残り全てをキャプションとして読み込む image_id = word[0] image_sentence = word[1:] #画像名がセット中に含まれていれば以下を実行 if image_id in setname: #その画像名をkeyにリストを作成 #その画像名が一つ目ならリストを作成 if image_id not in imagecaptions: imagecaptions[image_id] = list() #キャプションを開始語と終了語で囲む image_sentence = 'startseq ' + ' '.join(image_sentence) + ' endseq' imagecaptions[image_id].append(image_sentence) #ディクショナリに格納 return imagecaptions #トレーニングデータのキャプションと画像名を紐付ける train_imagecaptions_dict = make_imagecaptions_dictionary('caption_mold.txt', train) #バリデーションデータのキャプションと画像名を紐付ける val_imagecaptions_dict = make_imagecaptions_dictionary('caption_mold.txt', val)
試したこと
word[0]をprintで表示すると、値は正常に格納されていました。
printしたword0の要素です。
COCO_train2014_000000000009
COCO_train2014_000000000009
COCO_train2014_000000000009
COCO_train2014_000000000009
COCO_train2014_000000000009
COCO_train2014_000000000025
COCO_train2014_000000000025
COCO_train2014_000000000025
COCO_train2014_000000000025
COCO_train2014_000000000025
COCO_train2014_000000000030
引数のファイルは約60万行(約62KB)あり、このファイルの上から数行を取り出したテスト用ファイルではエラーが起きなかったので、エラーはファイルのサイズと関係があるのでしょうか。
補足情報(FW/ツールのバージョンなど)
引数のcaption_mold.txtの中身(一部)です。
COCO_train2014_000000000009 パン と 野菜 と 肉 と 果物 と クッキー の 弁当
COCO_train2014_000000000009 黄色い ケース の 中 に は ブロッコリー が 入っ て いる
COCO_train2014_000000000009 弁当 箱 に 料理 が 盛り付け られ て いる
COCO_train2014_000000000009 お 弁当 箱 の 中 に ハンバーグ と ブロッコリー と チーズ の つい た パン と ナッツ と フルーツ が ある
COCO_train2014_000000000009 カラフル なお 弁当 箱 に 詰め られ た おかず
COCO_train2014_000000000025 木の葉 を 食べ て いる キリン が いる
COCO_train2014_000000000025 1 頭 の キリン が 高い 木 の 草 を 食べ て いる
COCO_train2014_000000000025 キリン が 木 の 上 の 葉 を 食べ て いる
COCO_train2014_000000000025 木 の 枝 に かけ られ た エサ を 食べる キリン
COCO_train2014_000000000025 キリン が 木 に 乗せ られ た 餌 を 食べ て いる
COCO_train2014_000000000030 白い 花瓶 に 白 や 赤色 の 花 が 飾っ て ある
COCO_train2014_000000000030 バルコニー の 上 に は 沢山 の 花 が 入っ た 花瓶 が 置い て ある
COCO_train2014_000000000030 白い 花瓶 に 赤 と 白 の 花 が 入っ て いる
COCO_train2014_000000000030 白 の 陶器 の 花瓶 に 色とりどり の 花 が 活け て ある
COCO_train2014_000000000030 白い 花瓶 に 、 白 や 赤 の 花 が いけ られ て いる
引数のtrainの中身(一部)です。
{'COCO_train2014_000000180055', 'COCO_train2014_000000525932', 'COCO_train2014_000000433084', 'COCO_train2014_000000449780', 'COCO_train2014_000000150877', 'COCO_train2014_000000099628', 'COCO_train2014_000000437660', 'COCO_train2014_000000220834', 'COCO_train2014_000000343009'...}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/21 13:05
2020/09/21 13:58