前提
python初心者です。
https://sasuwo.org/image-classification/#toc2
上記のサイトを参考にGoogle Colabで画像認識AIを作っていたところ、"NameError: name 'X_train' is not defined"というエラーが出てしまいました。
どなたか解決方法をご教示頂けたら幸いです。
追記 ご回答頂いたことを試してみると質問したname errorは出なくなったのですが、value error というエラーが発生しました。
どなたか解決方法をご教示頂けたら幸いです。
実現したいこと
エラーが発生しない
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-3-343adfe60263> in <module> 41 42 #学習データとテストデータに分ける(テストデータ二割、学習データ八割) ---> 43 X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2) 44 #学習データ(八割) 45 print(X_train.shape) 1 frames /usr/local/lib/python3.8/dist-packages/sklearn/model_selection/_split.py in _validate_shuffle_split(n_samples, test_size, train_size, default_test_size) 2096 2097 if n_train == 0: -> 2098 raise ValueError( 2099 "With n_samples={}, test_size={} and train_size={}, the " 2100 "resulting train set will be empty. Adjust any of the " ValueError: With n_samples=0, test_size=0.2 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters.
該当のソースコード
from google.colab import drive drive.mount('/content/drive') %cd "/content/drive/My Drive/Google Colab" import os import cv2 import numpy as np import glob as glob from sklearn.model_selection import train_test_split from keras.utils import np_utils #フォルダをクラス名にする path = "img/deep_learning" folders = os.listdir(path) #フォルダ名を抽出 classes = [f for f in folders if os.path.isdir(os.path.join(path, f))] n_classes = len(classes) #画像とラベルの格納 X = [] Y = [] #画像を読み込みリサイズする for label,class_name in enumerate(classes): files = glob.glob(path + "/" + class_name + "/*.jpg") for file in files: img = cv2.imread(file) img = cv2.resize(img,dsize=(224,224)) X.append(img) Y.append(label) ~~打ち消し線~~#精度を上げるために正規化 X = np.array(X) X = X.astype('float32') X /= 255.0 #ラベルの変換 Y = np.array(Y) Y = np_utils.to_categorical(Y,n_classes) Y[:5] #学習データとテストデータに分ける(テストデータ二割、学習データ八割) X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2) #学習データ(八割) print(X_train.shape) #テストデータ(二割) print(X_test.shape) #学習データ(八割) print(Y_train.shape) #テストデータ(二割) print(Y_test.shape) from keras.applications.vgg16 import VGG16 from keras.models import Sequential from keras.models import model_from_json from keras.models import Model from keras.layers import Input, Activation, Dense, Flatten, Dropout from tensorflow.keras.optimizers import Adam #vgg16 input_tensor = Input(shape=(224,224,3)) #最後の1000層を省く base_model = VGG16(weights='imagenet',input_tensor=input_tensor,include_top=False) #後付けで入れたい層の作成 top_model = Sequential() top_model.add(Flatten(input_shape=base_model.output_shape[1:])) top_model.add(Dense(n_classes, activation='softmax')) #結合 model = Model(inputs=base_model.input,outputs=top_model(base_model.output)) #学習させない層 for layer in model.layers[:15]: layer.trainable = False print('# layers=', len(model.layers)) model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) model.summary() #学習データで学習 model.fit(X_train, Y_train, epochs = 20, batch_size = 16) #テストデータで精度確認 score = model.evaluate(X_test, Y_test, batch_size = 16)
試したこと
調べてみると、ValueError: n_samples=0、test_size=0.2、train_size=None の場合、結果のトレーニング セットは空になります。 前述のパラメータのいずれかを調整します。という意味みたいです。
そして、Stack Overflowというサイトに同じエラーになった人が質問をしていてその答えに"私の場合、データへのパスが無効でした。 ロードされたファイルへのパスが存在するかどうか、またはファイルを読み取る変数にデータが保持されているかどうかを確認してください。"と書かれてありました。
しかし、私ではこの意味が理解できなかったので質問をさせて頂きました。
補足情報(FW/ツールのバージョンなど)
MacBook Pro 13.0.1
Python 3.11.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/04 09:08
2023/01/04 17:19
2023/01/05 04:42
2023/01/05 10:25
2023/01/06 07:05
2023/01/06 07:35
2023/01/07 05:36