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

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

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

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

深層学習

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

機械学習

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

Python

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

Q&A

解決済

1回答

5731閲覧

reshapeを行えないエラー

maguro2020

総合スコア34

Keras

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

深層学習

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/07/20 06:57

#前提・実現したいこと
GitHub WeaklyAnomalyDetection
上記サイト様のコードを参考に、Pythonを用いて自前のデータセットで異常検知を行いたいと考えております。

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

Python

1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-12-7bfdc75aa020> in <module> 4 1 # 普通の異常検知 5 2 for i in range(2): 6----> 3 train_and_evaluate(i+1, False) 7 4 8 5 # 弱異常検知 9 10<ipython-input-11-ef7de7d098c9> in train_and_evaluate(number, anomaly) 11 63 train = np.array(train) 12 64 13---> 65 train = train.reshape((len(train),-1)) 14 66 test_c = test_c.reshape((len(X_test_c),-1)) 15 67 test_b = test_b.reshape((len(X_test_b),-1)) 16 17ValueError: cannot reshape array of size 0 into shape (0,newaxis)

#コード

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 9from b_c_dataset import BCN_Dataset 10 11bell = 0#bellは0 12call = 1#callは1 13 14# dataset 15(x_train, y_train), (x_test, y_test) = BCN_Dataset.create_bcn() 16 17x_train = x_train.reshape(x_train.shape[0], 583, 438, 3) 18x_test = x_test.reshape(x_test.shape[0], 583, 438, 3) 19 20x_train = x_train.astype('float32') / 255 21x_test = x_test.astype('float32') / 255 22 23#学習データ 24x_train_sum, x_train_c, x_train_b, x_test_c, x_test_b = [], [], [], [], [] 25y_train_sum = [] 26 27for i in range(len(x_train)): 28 if y_train[i] == bell: 29 x_train_b.append(x_train[i]) 30 elif y_train[i] == call: 31 x_train_c.append(x_train[i]) 32 else: 33 x_train_sum.append(x_train[i]) 34 y_train_sum.append(y_train[i]) 35 36x_train_sum = np.array(x_train_sum) 37x_train_b = np.array(x_train_b) 38x_train_c = np.array(x_train_c) 39 40#trainデータからランダムに10個抽出 41number = np.random.choice(np.arange(0,x_train_sum.shape[0]),10,replace=False) 42 43x, y = [], [] 44 45for i in number: 46 x.append(x_train_sum[i]) 47 y.append(y_train_sum[i]) 48 49x_train_sum = np.array(x) 50y_train_sum = np.array(y) 51 52#callデータからランダムに10個抽出 53number = np.random.choice(np.arange(0,x_train_c.shape[0]),10,replace=False) 54 55x, y = [], [] 56 57for i in number: 58 x.append(x_train_c[i]) 59 60#データ結合 61x_train_sum = np.vstack((x_train_sum, np.array(x))) 62y_train_sum = np.hstack((y_train_sum, call*np.ones(10))) 63 64#bellデータからランダムに10個抽出 65number = np.random.choice(np.arange(0,x_train_b.shape[0]),10,replace=False) 66 67x, y = [], [] 68 69for i in number: 70 x.append(x_train_b[i]) 71 72# Data Augmentation 73datagen = ImageDataGenerator(rotation_range=10, 74 width_shift_range=0.1, 75 height_shift_range=0.1, 76 horizontal_flip=False) 77img = [] 78 79for d in datagen.flow(np.array(x), batch_size=1): 80 # このあと画像を表示するためにndarrayをPIL形式に変換して保存する 81 img.append(d[0]) 82 # datagen.flowは無限ループするため必要な枚数取得できたらループを抜ける 83 if len(img) == 10: 84 print("finish") 85 break 86 87#データ結合 88x_train_sum = np.vstack((x_train_sum, np.array(img))) 89y_train_sum = np.hstack((y_train_sum, bell*np.ones(10))) 90y_train_sum = to_categorical(y_train_sum) 91 92#テストデータ 93for i in range(len(x_test)): 94 if y_test[i] == 1:#callは1 95 x_test_c.append(x_test[i]) 96 97 if y_test[i] == 0:#bellは0 98 x_test_b.append(x_test[i]) 99 100x_test_c = np.array(x_test_c) 101x_test_b = np.array(x_test_b) 102 103print(x_train_sum.shape) 104print(y_train_sum.shape) 105print(x_test_c.shape) 106print(x_test_b.shape) 107 108import cv2 109from PIL import Image 110 111def resize(x): 112 x_out = [] 113 114 for i in range(len(x)): 115 img = cv2.cvtColor(x[i], cv2.COLOR_RGB2BGR) 116 img = cv2.resize(img,dsize=(96,96)) 117 x_out.append(img) 118 119 return np.array(x_out) 120 121X_train_sum = resize(x_train_sum) 122X_test_c = resize(x_test_c) 123X_test_b = resize(x_test_b) 124 125import keras 126from keras.applications import MobileNetV2 127from keras.optimizers import Adam, SGD 128from keras.models import Model 129from keras.layers import GlobalAveragePooling2D, Dense 130from keras import backend as K 131 132from sklearn.neighbors import LocalOutlierFactor 133from sklearn import metrics 134from sklearn.preprocessing import MinMaxScaler 135 136 137input_shape = (96, 96, 3) 138classes = 3 139batchsize = 128 140alpha = 0.5 141 142def train_and_evaluate(number, anomaly=True): 143 # mobile net読み込み 144 print("Model build...") 145 146 mobile = MobileNetV2(include_top=True, input_shape=input_shape, alpha=alpha, 147 weights='imagenet') 148 149 # 最終層削除 150 mobile.layers.pop() 151 model = Model(inputs=mobile.input,outputs=mobile.layers[-1].output) 152 153 # L2層と全結合層を付ける 154 c = keras.layers.Lambda(lambda xx: 5*(xx)/K.sqrt(K.sum(xx**2)))(model.output) #metric learning 155 c = Dense(classes, activation='softmax')(c) 156 model = Model(inputs=model.input,outputs=c) 157 158 #model.summary() 159 160 model.compile(loss='categorical_crossentropy', 161 optimizer=Adam(amsgrad=True), 162 metrics=['accuracy']) 163 164 print(number,"training...") 165 166 #cnnの学習 167 if anomaly == True: 168 train_NO = 5000 169 else: 170 train_NO = 4500 171 172 hist = model.fit(X_train_sum[:train_NO], 173 y_train_sum[:train_NO], 174 batch_size=128, 175 epochs=50, 176 verbose = False) 177 178 179 # 最終層削除 180 model.layers.pop() 181 model = Model(inputs=model.input,outputs=model.layers[-1].output) 182 183 train = model.predict(X_train_sum[4000:4500], batch_size=1)#スニーカー 184 test_c = model.predict(X_test_c, batch_size=1) 185 test_b = model.predict(X_test_b, batch_size=1) 186 187 train = np.array(train) 188 189 train = train.reshape((len(train),-1)) 190 test_c = test_c.reshape((len(X_test_c),-1)) 191 test_b = test_b.reshape((len(X_test_b),-1)) 192 193 #0-1変換 194 ms = MinMaxScaler() 195 train = ms.fit_transform(train) 196 test_c = ms.transform(test_c) 197 test_b = ms.transform(test_b) 198 199 # LOF 200 clf = LocalOutlierFactor(n_neighbors=5) 201 y_pred = clf.fit(train) 202 203 # plot the level sets of the decision function 204 Z1 = -clf._decision_function(test_c) 205 Z2 = -clf._decision_function(test_b) 206 207 #ROC曲線の描画 208 y_true = np.zeros(len(test_c)+len(test_b)) 209 y_true[len(test_c):] = 1#0:正常、1:異常 210 211 # FPR, TPR(, しきい値) を算出 212 fpr, tpr, _ = metrics.roc_curve(y_true, np.hstack((Z1, Z2))) 213 214 # AUC 215 auc = metrics.auc(fpr, tpr) 216 217 # ROC曲線をプロット 218 plt.plot(fpr, tpr, label='metric learning(AUC = %.2f)'%auc) 219 plt.legend() 220 plt.title(str(number)+'ROC curve') 221 plt.xlabel('False Positive Rate') 222 plt.ylabel('True Positive Rate') 223 plt.grid(True) 224 plt.show() 225 226#これより下のコードを実行したところ上記のエラーが発生いたしました。 227# 普通の異常検知 228for i in range(2): 229 train_and_evaluate(i+1, False) 230 231# 弱異常検知 232for i in range(2): 233 train_and_evaluate(i+1)

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

#試していること
エラーメッセージについて、reshapeの使い方がおかしいのかと思い調査を行っているのですが、今のところ全く進展がなく頭を抱えております。

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

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

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

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

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

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

can110

2020/07/20 07:11

「train = np.array(train)」の結果のshapeはどうなるようにコードを書いていますか? そして実際にはどのようなshapeになっていますか? またprint(train)した結果はどうなっていますか? それは期待した結果になっていますか? 以上、質問本文に追記ください。
guest

回答1

0

ベストアンサー

trainリストの中身が空の場合、提示エラーが発生します。
trainの中身が意図したものになっているか確認し、なっていないならその原因を調査する必要があるかと思います。

Python

1import numpy as np 2 3train = np.array([]) 4train = train.reshape(len(train),-1) 5# ValueError: cannot reshape array of size 0 into shape (0,newaxis)

投稿2020/07/20 07:25

can110

総合スコア38341

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

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

maguro2020

2020/07/20 07:44

ご回答していただきありがとうございます。can110様。 can110様のご指摘通り、print(train)で中身を確認いたしましたところエラーが発生いたしました。 print(train) #NameError: name 'train' is not defined となってしまったので、現在、このエラーの原因の調査をしております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問