🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
深層学習

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

コードレビュー

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

Q&A

解決済

1回答

715閲覧

python 画像プロットのエラーの解決法、やり方の伝授をお願いします。

kusegasugoi0221

総合スコア11

深層学習

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

コードレビュー

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

0グッド

0クリップ

投稿2020/12/07 07:13

編集2020/12/08 16:45

画像の特徴量をだしてそれをt-SNEで二次元化してそれをマップにプロットしようと考えています。
Xが求めた特徴量を格納したもので、labelはXに対応したラベルを示しています。
マップのプロットのところでエラーが発生しまして以下にコードとエラー内容を示します。
分かる方がいらしたら教えてください。
最初に全体のコードです。

# -*- coding: utf-8 -* import glob import cv2 import numpy as np import time from tqdm import tqdm from skimage import feature,exposure from keras.models import model_from_json from keras.utils.vis_utils import plot_model from keras.models import Model import pandas as pd from matplotlib import pylab as plt from sklearn.manifold import TSNE from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler # 特徴量抽出 def create_images_array(load_img_paths,model,layer_name): imgs=[] middle_layer_model = Model(inputs=model.input, outputs=model.get_layer(layer_name).output) for load_img_path in tqdm(load_img_paths): img = cv2.imread(load_img_path) #型を合わせる。255は正規化のため。 target = np.reshape(img, (1, img.shape[0], img.shape[1], img.shape[2])).astype('float') / 255.0 middle_output = middle_layer_model.predict(target) imgs.append(middle_output) return np.array(imgs, np.float32) def tSNE(X,seikika): #データの正規化 seikika.fit(X) X_pre_emb = seikika.transform(X) #tSNEの適用 tsne = TSNE(n_components=2, random_state=0) X_embedded = tsne.fit_transform(X_pre_emb) #tSNEで次元削減したデータの正規化 X_2d= seikika.fit_transform(X_embedded) print(X_2d.shape) #print(X_2d) return X_2d def main(): t1 = time.time() json_string = open('./preprocess/model.json').read() model = model_from_json(json_string) model.load_weights('./preprocess/weight.hdf5') layer_name = 'conv5_block3_out' # 学習用の画像ファイルの格納先(FEのT1~T8,WのT1~T8) LOAD_TRAIN_IMG1S_PATH = './preprocess_images_kears/case3/train/T1-FE/*' LOAD_TRAIN_IMG2S_PATH = './preprocess_images_keras/case3/train/T2-FE/*' LOAD_TRAIN_IMG3S_PATH = './preprocess_images_keras/case3/train/T3-FE/*' LOAD_TRAIN_IMG4S_PATH = './preprocess_images_keras/case3/train/T4-FE/*' LOAD_TRAIN_IMG5S_PATH = './preprocess_images_keras/case3/train/T5-FE/*' LOAD_TRAIN_IMG6S_PATH = './preprocess_images_keras/case3/train/T6-FE/*' LOAD_TRAIN_IMG7S_PATH = './preprocess_images_keras/case3/train/T7-FE/*' LOAD_TRAIN_IMG8S_PATH = './preprocess_images_keras/case3/train/T8-FE/*' LOAD_TRAIN_IMG9S_PATH = './preprocess_images_keras/case3/train/T1-W/*' LOAD_TRAIN_IMG10S_PATH = './preprocess_images_keras/case3/train/T2-W/*' LOAD_TRAIN_IMG11S_PATH = './preprocess_images_keras/case3/train/T3-W/*' LOAD_TRAIN_IMG12S_PATH = './preprocess_images_keras/case3/train/T4-W/*' LOAD_TRAIN_IMG13S_PATH = './preprocess_images_keras/case3/train/T5-W/*' LOAD_TRAIN_IMG14S_PATH = './preprocess_images_keras/case3/train/T6-W/*' LOAD_TRAIN_IMG15S_PATH = './preprocess_images_keras/case3/train/T7-W/*' LOAD_TRAIN_IMG16S_PATH = './preprocess_images_keras/case3/train/T8-W/*' # 学習用の画像ファイルのパスを取得 load_img1_paths = glob.glob(LOAD_TRAIN_IMG1S_PATH) load_img2_paths = glob.glob(LOAD_TRAIN_IMG2S_PATH) load_img3_paths = glob.glob(LOAD_TRAIN_IMG3S_PATH) load_img4_paths = glob.glob(LOAD_TRAIN_IMG4S_PATH) load_img5_paths = glob.glob(LOAD_TRAIN_IMG5S_PATH) load_img6_paths = glob.glob(LOAD_TRAIN_IMG6S_PATH) load_img7_paths = glob.glob(LOAD_TRAIN_IMG7S_PATH) load_img8_paths = glob.glob(LOAD_TRAIN_IMG8S_PATH) load_img9_paths = glob.glob(LOAD_TRAIN_IMG9S_PATH) load_img10_paths = glob.glob(LOAD_TRAIN_IMG10S_PATH) load_img11_paths = glob.glob(LOAD_TRAIN_IMG11S_PATH) load_img12_paths = glob.glob(LOAD_TRAIN_IMG12S_PATH) load_img13_paths = glob.glob(LOAD_TRAIN_IMG13S_PATH) load_img14_paths = glob.glob(LOAD_TRAIN_IMG14S_PATH) load_img15_paths = glob.glob(LOAD_TRAIN_IMG15S_PATH) load_img16_paths = glob.glob(LOAD_TRAIN_IMG16S_PATH) # 学習用の画像ファイルをロードし特徴量抽出 imgs1 = create_images_array(load_img1_paths,model,layer_name) imgs2 = create_images_array(load_img2_paths,model,layer_name) imgs3 = create_images_array(load_img3_paths,model,layer_name) imgs4 = create_images_array(load_img4_paths,model,layer_name) imgs5 = create_images_array(load_img5_paths,model,layer_name) imgs6 = create_images_array(load_img6_paths,model,layer_name) imgs7 = create_images_array(load_img7_paths,model,layer_name) imgs8 = create_images_array(load_img8_paths,model,layer_name) imgs9 = create_images_array(load_img9_paths,model,layer_name) imgs10 = create_images_array(load_img10_paths,model,layer_name) imgs11 = create_images_array(load_img11_paths,model,layer_name) imgs12 = create_images_array(load_img12_paths,model,layer_name) imgs13 = create_images_array(load_img13_paths,model,layer_name) imgs14 = create_images_array(load_img14_paths,model,layer_name) imgs15 = create_images_array(load_img15_paths,model,layer_name) imgs16 = create_images_array(load_img16_paths,model,layer_name) X = np.r_[imgs1, imgs2, imgs3, imgs4, imgs5, imgs6, imgs7, imgs8, imgs9, imgs10, imgs11, imgs12, imgs13, imgs14, imgs15, imgs16] # 正解ラベルを生成imgs.番号でラベルを決める #2種類分類 labels1 = np.full(len(load_img1_paths), 0, np.int32) labels2 = np.full(len(load_img2_paths), 0, np.int32) labels3 = np.full(len(load_img3_paths), 0, np.int32) labels4 = np.full(len(load_img4_paths), 0, np.int32) labels5 = np.full(len(load_img5_paths), 0, np.int32) labels6 = np.full(len(load_img6_paths), 0, np.int32) labels7 = np.full(len(load_img7_paths), 0, np.int32) labels8 = np.full(len(load_img8_paths), 0, np.int32) labels9 = np.full(len(load_img9_paths), 1, np.int32) labels10 = np.full(len(load_img10_paths), 1, np.int32) labels11 = np.full(len(load_img11_paths), 1, np.int32) labels12 = np.full(len(load_img12_paths), 1, np.int32) labels13 = np.full(len(load_img13_paths), 1, np.int32) labels14 = np.full(len(load_img14_paths), 1, np.int32) labels15 = np.full(len(load_img15_paths), 1, np.int32) labels16 = np.full(len(load_img16_paths), 1, np.int32) label = np.r_[labels1, labels2, labels3, labels4, labels5, labels6, labels7, labels8, labels9, labels10, labels11, labels12, labels13, labels14, labels15, labels16] #正規化 seikika = StandardScaler() #seikika = MinMaxScaler() X_embeddedsc = tSNE(X,seikika) #print(X_embeddedsc) # グラフを横長にする from matplotlib.pylab import rcParams rcParams['figure.figsize'] = 15, 6 import matplotlib as mpl mpl.rcParams['font.family'] = ['serif'] #8種類分類のプロット print("-----------------------------------------------------------") # 可視化の用意 color_list = ["blue", "red"] marker_list = ["o", "^"] label_list = ["FE", "W"] plt.figure(figsize=(7,7)) plt.title("feautures") #plt.tick_params(labelsize=16) plt.xlabel("t-SNE comp-1") plt.ylabel("t-SNE comp-2") for index in range(len(np.unique(label))): plt.scatter(X_embeddedsc[label==index,0], X_embeddedsc[label==index,1], edgecolor=color_list[index],color=color_list[index], marker=marker_list[index], label=label_list[index]) plt.legend(loc="upper right") plt.show() print("-----------------------------------------------------------\n\n") t2 = time.time() elapsed_time = (t2-t1)/3600 print(f"経過時間:{elapsed_time}") if __name__ == '__main__': main()

のように一通り簡単にコードを書いてみたのですが、次のエラーが発生しました。

Traceback (most recent call last): File "C:\Users\Desktop\tSNE_CNN.py", line 242, in <module> main() File "C:\Users\Desktop\tSNE_CNN.py", line 126, in main X = np.r_[imgs1, imgs2, imgs3, imgs4, imgs5, imgs6, imgs7, imgs8, imgs9, imgs10, imgs11, imgs12, imgs13, imgs14, imgs15, imgs16] File "C:\anaconda\lib\site-packages\numpy\lib\index_tricks.py", line 406, in __getitem__ res = self.concatenate(tuple(objs), axis=axis) File "<__array_function__ internals>", line 6, in concatenate ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 5 dimension(s)

コードのエラーを読み取るにコードの最後当たりの場所の以下のコードがエラーの原因と考えます

for index in range(len(np.unique(label))): plt.scatter(X_embeddedsc[label==index,0], X_embeddedsc[label==index,1], edgecolor=color_list[index],color=color_list[index], marker=marker_list[index], label=label_list[index]) plt.legend(loc="upper right")

そのコードの中でもの以下の書き方が分からず困っています。X_embeddedsにたいしてラベル付けされたものを引き出すにはどのようにコードを書けばいいでしょうか。

X_embeddedsc[label==index,0], X_embeddedsc[label==index,1]

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

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

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

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

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

meg_

2020/12/07 07:29

エラーメッセージは一部を切り取るのではなく全てを掲載してください。
kusegasugoi0221

2020/12/08 00:13

2番目のコード掲載欄のところにエラーメッセージを掲載しています。 エラーメッセージはこれのみでした。よろしくお願いします。
meg_

2020/12/08 00:50

エラー発生箇所の情報はありませんか?
kusegasugoi0221

2020/12/08 16:47

前回と同じところにエラーの詳細なるものを掲載しました。 すみません勝手にここはあまり関係ないとこという認識でした汗
meg_

2020/12/09 00:39

エラー発生箇所は下記ですね。 > X = np.r_[imgs1, imgs2, imgs3, imgs4, imgs5, imgs6, imgs7, imgs8, imgs9, imgs10, imgs11, imgs12, imgs13, imgs14, imgs15, imgs16] どうも「次元が不整合」的なエラーメッセージですね。各numpy配列のshapeを確認されてはどうでしょうか?
kusegasugoi0221

2020/12/09 03:08

調べたところ各1枚の画像が(1, 7, 7, 2048)の配列を持っていて、それぞれファイルに画像を384枚格納しているので各imgsが(384, 1, 7, 7, 2048)の配列をもっていました。ここでいう次元の不整合性のエラーはどういったことになるでしょうか。たびたび質問すみません、、
meg_

2020/12/09 04:18

imgs1~imgs16のshapeは全て同じでしたか?同じであればエラーは出ないはずですが。
kusegasugoi0221

2020/12/09 07:27

一つだけ参照が上手くいってなくてデータを読み込めていないものがありました。そこを直すと上手くいきました。 ご回答とても参考になりました。ありがとうございました。
guest

回答1

0

自己解決

LOAD_TRAIN_IMG1S_PATH = './preprocess_images_kears/case3/train/T1-FE/*'

この参照が上手くいっていないコードがありそこを訂正することでエラーを解決しました。

投稿2020/12/09 07:52

kusegasugoi0221

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問