#前提・実現したいこと
Pythonを用いて、自前のデータセットを作成したいと考えております。
#発生している問題
若干のコードの構文の違いによって出力結果が異なってしまい困っております。
#コード(自前のデータセットのコード:2種類)
①.エラーは発生しないが、同時にx_train、y_train、x_test、y_testの中身が[]となってしまうコード
Python
1import matplotlib.pyplot as plt 2import os 3import cv2 4import random 5import numpy as np 6 7DATADIR_train = '/Users/kuromaguro/desktop/弱教師あり学習/b_c_dataset/png/train' 8DATADIR_test = '/Users/kuromaguro/desktop/弱教師あり学習/b_c_dataset/png/test' 9CATEGORIES = ["bell", "call","noise"] #bell:0, call:1 ,noise:2 10train_data = [] 11test_data = [] 12 13def load_bcn_data(): 14 for class_num, category in enumerate(CATEGORIES): 15 path = os.path.join(DATADIR_train, category) 16 for image_name in os.listdir(path): 17 try: 18 img_array = cv2.imread(os.path.join(path, image_name),) # 画像読み込み 19 img_resize_array = cv2.resize(img_array, (583, 438)) # 画像のリサイズ 20 train_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 21 except Exception as e: 22 pass 23 24 for class_num, category in enumerate(CATEGORIES): 25 path = os.path.join(DATADIR_test, category) 26 for image_name in os.listdir(path): 27 try: 28 img_array = cv2.imread(os.path.join(path, image_name),) # 画像読み込み 29 img_resize_array = cv2.resize(img_array, (583, 438)) # 画像のリサイズ 30 test_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 31 except Exception as e: 32 pass 33 load_bcn_data() 34 35 random.shuffle(train_data) # データをシャッフル 36 x_train = [] # 画像データ 37 y_train = [] # ラベル情 38 39 random.shuffle(test_data) # データをシャッフル 40 x_test = [] # 画像データ 41 y_test = [] # ラベル情報 42 43 # データセット作成(train) 44 for feature, label in train_data: 45 x_train.append(feature) 46 y_train.append(label) 47 48 # データセット作成(test) 49 for feature, label in test_data: 50 x_test.append(feature) 51 y_test.append(label) 52 53 # numpy配列に変換 54 x_train = np.array(x_train) 55 y_train = np.array(y_train) 56 57 x_test =np.array(x_test) 58 y_test =np.array(y_test) 59 60 return (x_train, y_train), (x_test, y_test)
①の中身は以下のようになっております。(printで中身を確認いたしました)
Python
1print(list(x_train)) #x_test, y_train, y_testの中身も同じ結果となりました 2#[] 3
②.コードの最後にreturnを入れてしまうとエラーとなってしまうが、x_train,y_train,x_test,y_testの中身は作ることができる
Python
1import matplotlib.pyplot as plt 2import os 3import cv2 4import random 5import numpy as np 6 7os.chdir('/Users/kuromaguro/desktop/弱教師あり学習') 8os.getcwd() 9 10DATADIR_train = '/Users/kuromaguro/desktop/弱教師あり学習/b_c_dataset/png/train' 11DATADIR_test = '/Users/kuromaguro/desktop/弱教師あり学習/b_c_dataset/png/test' 12CATEGORIES = ["bell", "call","noise"] #bell:0, call:1 ,noise:2 13train_data = [] 14test_data = [] 15 16def load_bcn_data(): 17 for class_num, category in enumerate(CATEGORIES): 18 path = os.path.join(DATADIR_train, category) 19 for image_name in os.listdir(path): 20 try: 21 img_array = cv2.imread(os.path.join(path, image_name),) # 画像読み込み 22 img_resize_array = cv2.resize(img_array, (583, 438)) # 画像のリサイズ 23 train_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 24 except Exception as e: 25 pass 26 27 for class_num, category in enumerate(CATEGORIES): 28 path = os.path.join(DATADIR_test, category) 29 for image_name in os.listdir(path): 30 try: 31 img_array = cv2.imread(os.path.join(path, image_name),) # 画像読み込み 32 img_resize_array = cv2.resize(img_array, (583, 438)) # 画像のリサイズ 33 test_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 34 except Exception as e: 35 pass 36load_bcn_data() 37 38random.shuffle(train_data) # データをシャッフル 39x_train = [] # 画像データ 40y_train = [] # ラベル情 41 42random.shuffle(test_data) # データをシャッフル 43x_test = [] # 画像データ 44y_test = [] # ラベル情報 45 46 # データセット作成(train) 47for feature, label in train_data: 48 x_train.append(feature) 49 y_train.append(label) 50 51 # データセット作成(test) 52for feature, label in test_data: 53 x_test.append(feature) 54 y_test.append(label) 55 56# numpy配列に変換 57x_train = np.array(x_train) 58y_train = np.array(y_train) 59 60x_test =np.array(x_test) 61y_test =np.array(y_test) 62 63#ここのreturnでエラーが発生いたします 64return (x_train, y_train), (x_test, y_test)
コード②のエラーメッセージを下記に記載いたします。
Python
1 File "<ipython-input-8-eed010c38d72>", line 28 2 return (x_train, y_train), (x_test, y_test) 3 ^ 4SyntaxError: 'return' outside function
②の中身は以下のようになっております。
Python
1print(list(y_train)) 2#[0, 0, 0, 0, 0, 2, 1, 1, 2, … 0, 2] 3#x_train, x_test, y_trainは長くなってしまうため省略させていただきます。中身はしっかりと入っておりました。
#試していること
①と②のコードがなぜこうも出力結果が違うのか、いまだにわかっていない状況ですが、コードの途中にある
def load_bcn_data(): #省略 load_bcn_data()
のあとのコードが出力結果が異なってしまう原因を作っているのではないかと考えております。(インデントのあるなしなど)ただ、ではどうすればコードが改善するのかがわからず頭を抱えております。
#補足
使っているPCはmacOS Catalina バージョン10.15.5
Pythonのバージョンは3.6.5です
Jupiter notebookを使用しています
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。