🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

4465閲覧

NameError: name 'X_train' is not defined`の解消方法について

SuzuAya

総合スコア71

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/21 04:04

編集2019/09/21 06:33

前提・実現したいこと

以下のサンプルコードを参考に、自前のデータセットで実装をしたいと考えています。
サンプルコード

サンプルコードではfit関数を使っていましたが、自前のデータセットが大容量のため、fit_generator関数に書き換え実行したところ、以下のようなエラーが発生してしまいました。
とても基本的な質問となってしまいますが、generatorを使って学習を行う場合、どうすればX_trainやY_trainを定義できるのかご教示いただけないでしょうか。

説明に不足している点がありましたらお手数ですがお知らせいただけますと幸いです。
どうぞよろしくお願いいたします。

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

NameError Traceback (most recent call last) <ipython-input-12-c5e53abddd3d> in <module> 5 #L2-SoftmaxLoss 6 print("L2-SoftmaxLoss training...") ----> 7 model0 = train_L2(X_train, to_categorical(Y_train), 4, 50) 8 9 # roc graph NameError: name 'X_train' is not defined

該当のソースコード

Python

1import keras 2from keras.models import Model 3from keras.layers import Dense, GlobalAveragePooling2D,Input,Dropout,Activation 4from keras import applications 5from keras.preprocessing.image import ImageDataGenerator 6from keras.optimizers import Adam 7from keras.callbacks import CSVLogger,EarlyStopping 8import numpy as np 9from keras import backend as K 10from keras.engine.topology import Layer 11import numpy as np 12import tensorflow as tf 13from keras.preprocessing.image import load_img, img_to_array, array_to_img 14import os 15import matplotlib.pyplot as plt 16%matplotlib inline 17 18os.environ["CUDA_VISIBLE_DEVICES"]="2"#specify GPU 19 20#学習データの準備 21class train_Generator_xandy(object): # rule1 22 def __init__(self): 23 datagen = ImageDataGenerator(rescale=1.0/255.) 24 25 train_generator=datagen.flow_from_directory( 26 train_dir, 27 target_size=(299,299), 28 batch_size=12,#25, 29 class_mode='categorical', 30 shuffle=True) 31 32 self.gene = train_generator 33 34 def __iter__(self): 35 # __next__()はselfが実装してるのでそのままselfを返す 36 return self 37 38 def __next__(self): 39 X, Y = self.gene.next() 40 return X, Y 41 42class val_Generator_xandy(object): 43 def __init__(self): 44 validation_datagen=ImageDataGenerator(rescale=1.0/255.) 45 46 validation_generator=validation_datagen.flow_from_directory( 47 validation_dir, 48 target_size=(299,299), 49 batch_size=12,#25, 50 class_mode='categorical', 51 shuffle=True) 52 53 self.gene = validation_generator 54 55 def __iter__(self): 56 # __next__()はselfが実装してるのでそのままselfを返す 57 return self 58 59 def __next__(self): 60 X, Y = self.gene.next() 61 return X, Y 62 63 64train_dir = './train' 65validation_dir = './validation' 66train_generator = train_Generator_xandy() 67val_generator = val_Generator_xandy() 68 69#model構築 70input_shape = (299, 299, 3) 71 72classes = 4#10 73batchsize = 12#128 74#alpha = 0.5 75def train_L2(x, y, classes, epochs, batchsize=12): 76 base_model=keras.applications.inception_resnet_v2.InceptionResNetV2(input_shape=input_shape, 77 weights='imagenet', 78 include_top=False) 79 80 c = base_model.output 81 c = GlobalAveragePooling2D()(c) 82 c = keras.layers.Lambda(lambda xx: 5*(xx)/K.sqrt(K.sum(xx**2)))(c) #metric learning 83 c = Dense(classes, activation='softmax')(c) 84 model = Model(inputs=base_model.input,outputs=c) 85 86 #model.summary() 87 88 model.compile(loss='categorical_crossentropy', 89 #optimizer=Adam(lr=0.001), 90 #optimizer=SGD(lr=0.01, decay=1e-6, momentum=0.9), 91 optimizer=SGD(lr=5e-4, decay=0.00005), 92 metrics=['accuracy']) 93 94 callbacks_list = [ 95 callbacks.ModelCheckpoint( 96 filepath="model.simple.InceptionResNetV2.P5.SGD.a0.5.ep{epoch:02d}.h5",#delsavepath, 97 save_weights_only=False, 98 save_best_only=True), 99 100 callbacks.EarlyStopping(monitor='val_loss', patience=5, verbose=1)] 101 102 103 history = model.fit_generator(train_generator, steps_per_epoch=8072, epochs=30, 104 validation_steps=952, validation_data=validation_generator, 105 callbacks=callbacks_list) 106 107 return model 108 109def plot_roc(model0, train, test_normal, test_anomaly, name, layer1, layer2, layer3, layer4, layer5): 110 #層削除 get score 111 Z1_1, Z2_1 = model_modify(model0, train, test_normal, test_anomaly, layer1) 112 Z1_2, Z2_2 = model_modify(model0, train, test_normal, test_anomaly, layer2) 113 Z1_3, Z2_3 = model_modify(model0, train, test_normal, test_anomaly, layer3) 114 Z1_4, Z2_4 = model_modify(model0, train, test_normal, test_anomaly, layer4) 115 Z1_5, Z2_5 = model_modify(model0, train, test_normal, test_anomaly, layer5) 116 117 auc1 = roc(Z1_1, Z2_1, "L2 SoftmaxLoss") 118 auc2 = roc(Z1_2, Z2_2, "block_16_project_BN") 119 auc3 = roc(Z1_3, Z2_3, "block_14_project_BN") 120 auc4 = roc(Z1_4, Z2_4, "block_12_project_BN") 121 auc5 = roc(Z1_5, Z2_5, "block_10_project_BN") 122 plt.legend() 123 plt.title(name + '(ROC)') 124 plt.xlabel('False Positive Rate') 125 plt.ylabel('True Positive Rate') 126 plt.grid(True) 127 128 return auc1, auc2, auc3, auc4, auc5, Z2_3 # 異常サンプルだけあとで可視化 129 130#学習 131result1, result2, result3, result4, result5, = [], [], [], [], [] 132 133for i in range(10): 134 print("Try:",i+1,"/10") 135 #L2-SoftmaxLoss 136 print("L2-SoftmaxLoss training...") 137 model0 = train_L2(X_train, to_categorical(Y_train), 4, 50) 138

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/09/21 05:57

・リンクは「リンクの挿入」で書いてください。 ・「NameError: name 'X_train' is not defined」エラーメッセージの意味は理解されていますか?
SuzuAya

2019/09/21 06:01

>meg_様 ご指摘ありがとうございます。リンクの挿入方法を修正しました。 X_trainが定義されていないからこういったエラーが出るのだということは理解しているのですが、generatorを使用している場合、どのように定義したら良いか分からずこちらに質問をさせていただきました。
guest

回答1

0

【追記】
今回のジェネレータは「keras.utils.data_utils.Sequenceを実装したクラス」であることが必要なようです。
参考サイト

上記サイトにてメモリに乗り切らない大きなデータのKerasでの処理方法が説明されています。
参考に実装してください。

【追記終了】

ジェネレータを生成して「fit_generator()」に渡せばよいかと思います。

参考サイト

train_generator = train_Generator_xandy()
val_generator = val_Generator_xandy()

投稿2019/09/21 06:17

編集2019/09/21 07:22
meg_

総合スコア10736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SuzuAya

2019/09/21 06:49

>meg_様 ご回答ありがとうございます。 質問が分かりにくくて申し訳ないのですが、エラーが発生しているtrain_L2の引数をどうすればよいのか教えていただけないでしょうか。 試しにX_trainの代わりに、train_generatorを引数にすると、AttributeError: 'DirectoryIterator' object has no attribute 'ndim'というエラーが出てしまいます。
SuzuAya

2019/09/21 12:01

>meg_様 ご回答ありがとうございました。お送りいただいたサイトも参考にしながら、もう少し調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問