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

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

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

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

深層学習

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

機械学習

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

Python

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

Q&A

解決済

1回答

877閲覧

Pythonを用いて自前のデータセットを反映させたい

maguro2020

総合スコア34

Keras

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

深層学習

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/07/17 00:33

編集2020/07/19 08:22

#前提・実現したいこと
「弱異常検知」と他の異常検知、違いはなにか?
GitHub WeaklyAnomalyDetection(※詳細のコードはこちらに掲載されています)
上記サイト様を参考に、Pythonを用いて自前のデータセットで異常検知を行いたいと思い、そのために、自前のデータセットをロードできるようにしたいと考えております。

#発生している問題・エラーメッセージ
自分のデータセットの作成方法が良くなかったせいか、エラーメッセージは以下のようになっております。

Python

1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-15-cdc9ed56e962> in <module> 4 17 5 18 #trainデータからランダムに100個抽出 6---> 19 number = np.random.choice(np.arange(0,x_train_sum.shape[0]),100,replace=False) 7 20 8 21 x, y = [], [] 9 10mtrand.pyx in numpy.random.mtrand.RandomState.choice() 11 12ValueError: 'a' cannot be empty unless no samples are taken

ただ、上記のエラーの詳細については「試していること」でも述べさせていただきますが、過去にも質問をさせていただいており(※1)、確実ではありませんがエラーの原因については自分なりに把握をしているつもりです。
しかし、何故、異常検知のコードの方で以下のようにデータを呼び出しているにもかかわらず、x_train、y_train、x_test、y_testの全ての出力結果がprint()で確かめたところ、[](空白)となってしまうのかがわからず頭を抱えている状況です。
異常検知のコードの一部

from b_c_dataset import BCN_Dataset bell = 0#bellは0 call = 1#callは1 # dataset (x_train, y_train), (x_test, y_test) = BCN_Dataset.create_bcn()

※1:Pythonを用いて自前のデータセットで異常検知を行いたい

#コード
自前のデータセット(BCN_Dataset.py)

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 create_bcn(): 17 random.shuffle(train_data) # データをシャッフル 18 x_train = [] # 画像データ 19 y_train = [] # ラベル情 20 for class_num, category in enumerate(CATEGORIES): 21 path = os.path.join(DATADIR_train, category) 22 for image_name in os.listdir(path): 23 try: 24 img_array = cv2.imread(os.path.join(path, image_name),) # 画像読み込み 25 img_resize_array = cv2.resize(img_array, (583, 438)) # 画像のリサイズ 26 train_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 27 except Exception as e: 28 print(e) 29 30 for class_num, category in enumerate(CATEGORIES): 31 path = os.path.join(DATADIR_test, category) 32 for image_name in os.listdir(path): 33 try: 34 img_array = cv2.imread(os.path.join(path, image_name),) # 画像読み込み 35 img_resize_array = cv2.resize(img_array, (583, 438)) # 画像のリサイズ 36 test_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 37 except Exception as e: 38 print(e) 39 40 random.shuffle(test_data) # データをシャッフル 41 x_test = [] # 画像データ 42 y_test = [] # ラベル情報 43 44 # データセット作成(train) 45 for feature, label in train_data: 46 x_train.append(feature) 47 y_train.append(label) 48 49 # データセット作成(test) 50 for feature, label in test_data: 51 x_test.append(feature) 52 y_test.append(label) 53 54 # numpy配列に変換 55 x_train = np.array(x_train) 56 y_train = np.array(y_train) 57 58 x_test =np.array(x_test) 59 y_test =np.array(y_test) 60 61 return (x_train, y_train), (x_test, y_test)

簡単に自分が作成している(つもり)のデータセットの内容を説明いたしますと、trainフォルダとtestフォルダにbell、call、noiseフォルダにそれぞれの音のスペクトログラムの画像が収納されており、そこからデータを取得し、ラベル付を行い(bellは0、callは1、noiseは2)train_dataとtest_dataを作成し、最終的にx_train、y_train、x_test、y_testを作成する、というコードです。

下記より異常検知のコードとなります

Python

1import matplotlib.pyplot as plt 2import os 3import cv2 4import random 5import numpy as np 6from keras.utils import to_categorical 7from keras.preprocessing.image import ImageDataGenerator 8 9os.chdir('/Users/kuromaguro/desktop/弱教師あり学習') 10os.getcwd() 11 12from b_c_dataset import BCN_Dataset 13 14bell = 0#bellは0 15call = 1#callは1 16 17# dataset 18(x_train, y_train), (x_test, y_test) = BCN_Dataset.create_bcn() 19 20x_train = x_train.reshape(x_train.shape[0], 583, 438, 3) 21x_test = x_test.reshape(x_test.shape[0], 583, 438, 3) 22 23x_train = x_train.astype('float32') / 255 24x_test = x_test.astype('float32') / 255 25 26#学習データ 27x_train_sum, x_train_c, x_train_b, x_test_c, x_test_b, = [], [], [], [], [] 28y_train_sum = [] 29 30for i in range(len(x_train)): 31 if y_train[i] == bell: 32 x_train_b.append(x_train[i]) 33 elif y_train[i] == call: 34 x_train_c.append(x_train[i]) 35 else: 36 x_train_sum.append(x_train[i]) 37 y_train_sum.append(y_train[i]) 38 39x_train_sum = np.array(x_train_sum) 40x_train_b = np.array(x_train_b) 41x_train_c = np.array(x_train_c) 42 43#trainデータからランダムに100個抽出 44number = np.random.choice(np.arange(0,x_train_sum.shape[0]),100,replace=False) 45 46x, y = [], [] 47 48for i in number: 49 x.append(x_train_sum[i]) 50 y.append(y_train_sum[i]) 51 52x_train_sum = np.array(x) 53y_train_sum = np.array(y) 54

参考サイト様の異常検知のコードはまだ続きがありますが、上記でエラーが発生してしまっているため、省略をさせていただいております。

#試していること
過去に私は似たような質問をさせていただいております。
Pythonの構文による出力結果の違い
回答してくださった方がおっしゃっていた、「メイン処理でdef create_bcn関数を読んでいない」(※関数名を変更しています)というお言葉から、上記のコードだとメイン関数を読んでいないため、x_train、y_train、x_test、y_testの中身が空白となり、結果、「エラーメッセージ」のところで記載したエラーが発生してしまっているのではないか、と考えております。そこで、現在、自前のデータセットの最後に、create_bcn関数を呼ぶために「create_bcn()」と記述をしたりしているのですが、上手くいっていない状況です。素人の質問で大変恐縮ではありますが、何かご助言でもいただけたらと思います。

#補足
使っているPCはmacOS Catalina バージョン10.15.5
Pythonのバージョンは3.6.5です
Jupiter notebookを使用しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

直接の回答ではなくアドバイスです。

Python

1 try: 2 (略) 3 except Exception as e: 4 pass

とすると、エラーが発生しても気づかずに動作してしまいます。
passではなくprint(e)して、まずはどんなエラーが出ているか確認しましょう。

投稿2020/07/17 01:07

can110

総合スコア38341

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

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

maguro2020

2020/07/17 05:43

ご回答いただきありがとうございます。can110様。 自前のデータセットのcreate_bcn関数の中身をpassからprint(e)に変更し、定義し直しました。この後に、create_bcn関数を呼びだせば、出力結果でどんなエラーが発生しているかを確認できる、という認識でよろしいでしょうか?(質問した際の自前のデータセットのコードにも反映をさせました。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問