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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

1回答

1163閲覧

Pythonの構文による出力結果の違い

maguro2020

総合スコア34

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2020/07/15 14:55

#前提・実現したいこと
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を使用しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

①ではメイン処理でdef load_bcn_data関数を読んでいないので、リストは空のままとなります。
②では逆に関数の外、すなわちメイン処理上で不要なreturnを記載しているので提示エラーが発生しています。

どうすればコードが改善するのかがわからず頭を抱えております。

ひとまずやりたい処理、流れを頭の中で整理してください。

たとえば①ではload_bcn_data関数の中でload_bcn_data関数を呼び出していますが、その意図はなんでしょうか?

そして、それにあわせてインデントを整える、必要なところでだけreturnするとよいです。

投稿2020/07/15 23:14

編集2020/07/15 23:16
can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問