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

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

ただいまの
回答率

87.35%

githubにあるコードのモデル部分だけを変えて動かしたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 322

score 0

前提・実現したいこと

ファイル構造

killme_adversarial_example_with_TensorFlow-Keras-master
|—(下記の本コード).py
|—kill_me_images
|   |—gen_adv
|   |—kill_me_baby_dataset

|—models

モデルを作り、学習させたいです。
しかし、IndexErrorが出てしまいます。
画像サイズは128*128の3チャンネルなので合ってるはずなのですが、
エラーが出てしまいます。

jupiterNotebookでセルごとに分けて動かしているのですが、
学習するタイミングで失敗します。

発生している問題・エラーメッセージ

Found 0 images belonging to 7 classes.
Epoch 1/100

IndexError                                Traceback (most recent call last)

<ipython-input-18-bb8c98a37a31> in <module>
     12 
     13 # 学習開始!
---> 14 model.fit_generator(train_generator, steps_per_epoch=train_generator.samples//batch_size, epochs=100, callbacks=ckps)
     15 model.save("models/killme_vgg16.h5")

IndexError: list index out of range

該当のソースコード

# パッケージのインポート
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.layers import Activation, Dense, Dropout, Conv2D, Flatten, MaxPool2D
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import os
import cv2
from PIL import Image
%matplotlib inline

config = tf.compat.v1.ConfigProto(gpu_options=tf.compat.v1.GPUOptions(allow_growth=True))
sess = tf.compat.v1.Session(config=config)
tf.compat.v1.keras.backend.set_session(sess)



root_dir = 'kill_me_images/kill_me_baby_datasets/kill_me_baby_datasets/'
class_list = sorted(os.listdir(path=root_dir))
print("クラスリスト", class_list)



def load_imgs(root_dir):    

    print(class_list)
    num_class = len(class_list)
    img_paths = []
    labels = []
    images = []
    for cl_name in class_list:
        img_names = os.listdir(os.path.join(root_dir, cl_name))
        for img_name in img_names:
            img_paths.append(os.path.abspath(os.path.join(root_dir, cl_name, img_name)))
            hot_cl_name = get_class_one_hot(cl_name, class_list)
            labels.append(hot_cl_name)

    for img_path in img_paths:
        img = cv2.imread(img_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        images.append(img)

    images = np.array(images)

    return np.array(images), np.array(labels), class_list



def get_class_one_hot(class_str, class_list):
    label = class_list.index(class_str)
    label_hot = tf.one_hot(label, len(class_list))

    return label_hot


orig_image, orig_label, class_list = load_imgs(root_dir='kill_me_images/kill_me_baby_datasets/kill_me_baby_datasets/')




##############モデル作成###################
model = Sequential()

# Conv→Conv→Pool→Dropout
model.add(Conv2D(128, (3, 3), activation='relu', padding='same', input_shape=(128, 128, 3)))
model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

# Conv→Conv→Pool→Dropout
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

# Flatten→Dense→Dropout→Dense
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(7, activation='softmax'))




##############トレーニングと保存###################

batch_size = 32

model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(), metrics=['accuracy'])
tb_cb = tf.keras.callbacks.TensorBoard(log_dir="log_dir")
ckps = [tb_cb]

# 学習用データを用意する
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, horizontal_flip=True)
train_generator = train_datagen.flow_from_directory('kill_me_images/kill_me_baby_datasets/', classes=class_list, target_size=(128, 128), batch_size=batch_size, class_mode='categorical')

# 学習開始!
model.fit_generator(train_generator, steps_per_epoch=train_generator.samples//batch_size, epochs=100, callbacks=ckps)
model.save("models/killme_vgg16.h5")

sess = tf.keras.backend.get_session()
saver = tf.train.Saver()
saver.save(sess, "models/killme_vgg16.ckpt")

参考記事
https://qiita.com/taku-buntu/items/305d8eb16e9502b09ed

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

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

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

関連した質問

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