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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

解決済

google colaboratoryでのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

1回答

0リアクション

0クリップ

517閲覧

投稿2021/11/23 15:27

編集2021/11/24 08:07
!pip install tensorflow==2.0.0 !pip install keras==2.3.1 !pip install foolbox==2.4.0 !pip3 install h5py==2.10.0 import h5py import numpy as np from keras.applications.resnet50 import ResNet50 from foolbox.criteria import Misclassification, ConfidentMisclassification from keras.preprocessing import image as img from keras.applications.resnet50 import preprocess_input, decode_predictions import matplotlib.pyplot as plt import foolbox import pprint as pp import keras import pandas as pd %matplotlib inline #---------------------------- !wget https://github.com/GANs-in-Action/gans-in-action/raw/Chapter-10/chapter-10/DSC_0897.jpg !wget https://github.com/GANs-in-Action/gans-in-action/raw/Chapter-10/chapter-10/DSC_0896.jpg !wget https://raw.githubusercontent.com/GANs-in-Action/gans-in-action/master/chapter-10/initialization_vals_for_noise.csv #------------------------------------------------------ def load_image(img_path: str): image = img.load_img(img_path, target_size=(224, 224)) plt.imshow(image) x = img.img_to_array(image) return x image = load_image('DSC_0897.jpg') #------------------------------------------------------- keras.backend.set_learning_phase(0) kmodel = ResNet50(weights='imagenet') preprocessing = (np.array([104, 116, 123]), 1) #Kerasからfoolboxモデルのオブジェクトを生成する fmodel = foolbox.models.KerasModel(kmodel, bounds=(0, 255), preprocessing=preprocessing) #画像を(1,224,224,3)にしてResNet-50に合わせ、 #推定に使う画像がバッチに収まるようにする to_classify = np.expand_dims(image, axis=0) #predictを呼び出し、結果を表示する preds = kmodel.predict(to_classify) print('Predicted:', pp.pprint(decode_predictions(preds, top=20)[0])) #あとでラベルとして使うため、一番大きな数のインデックスを得る label = np.argmax(preds) #Keras ReNet-50はRGBではなくBGRのため、::-1で色チャンネルを逆転させる image = image[:, :, ::-1] #高い分類間違い基準を持った、攻撃のためのオブジェクトを作る attack = foolbox.v1.attacks.FGSM(fmodel, threshold=.9, criterion=ConfidentMisclassification(.9)) #ソース画像に攻撃を加える adversarial = attack(image, label) #敵対的サンプルのラベルを新たに推定する new_preds = kmodel.predict(np.expand_dims(adversarial, axis=0)) print('Predicted:', pp.pprint(decode_predictions(new_preds, top=20)[0])) # ------------------------------------------------------------ plt.figure(figsize=(12,12)) plt.subplot(1, 3, 1) plt.title('Original') plt.imshow(image[:,:,::-1] / 255) # division by 255 to convert [0, 255] to [0, 1] plt.axis('off') plt.subplot(1, 3, 2) plt.title('Adversarial') plt.imshow(adversarial[:, :, ::-1] / 255) # ::-1 to convert BGR to RGB plt.axis('off') plt.subplot(1, 3, 3) plt.title('Difference') difference = adversarial[:, :, ::-1] - image plt.imshow(difference / abs(difference).max() * 0.2 + 0.5) plt.axis('off') plt.show() # -------------------------------------------- max_vals = pd.read_csv('initialization_vals_for_noise.csv') #----------------------------------------- fig = plt.figure(figsize=(20,20)) # 平均と分散をfloatのリストにする sigma_list = list(max_vals.sigma) mu_list = list(max_vals.mu) conf_list = [] # 図10.8を表示するためのコア関数 def make_subplot(x, y, z, new_row=False): # それぞれの平均と分散を持ったのノイズをサンプリング rand_noise = np.random.normal(loc=mu, scale=sigma, size=(224,224, 3)) # 0-255の画素値のみを許す rand_noise = np.clip(rand_noise, 0, 255.) # 最初の推定を得る noise_preds = kmodel.predict(np.expand_dims(rand_noise, axis=0)) # 推定したクラスと確信度を得る prediction, num = decode_predictions(noise_preds, top=20)[0][0][1:3] num = round(num * 100, 2) conf_list.append(num) # 図10.8のための注釈用コードをセットアップしたのちに、注釈文を足す ax = fig.add_subplot(x,y,z) ax.annotate(prediction, xy=(0.1, 0.6), xycoords=ax.transAxes, fontsize=16, color='yellow') ax.annotate(f'{num}%' , xy=(0.1, 0.4), xycoords=ax.transAxes, fontsize=20, color='orange') if new_row: ax.annotate(f'$\mu$:{mu}, $\sigma$:{sigma}' , xy=(-.2, 0.8), xycoords=ax.transAxes, rotation=90, fontsize=16, color='black') # [0, 255]を[0, 1]に変換するため、255で割る ax.imshow(rand_noise / 255) ax.axis('off') # 画像内に文字を挿入するためのループ本体 for i in range(1,101): if (i-1) % 10==0: mu = mu_list.pop(0) sigma = sigma_list.pop(0) make_subplot(10,10, i, new_row=True) else: make_subplot(10,10, i) plt.show() ##---------------------------------------------------- fig = plt.figure(figsize=(20,20)) sigma_list = list(max_vals.sigma) mu_list = list(max_vals.mu) sum_pred = [] def make_subplot(x, y, z, new_row=False): rand_noise = np.random.normal(loc=mu, scale=sigma, size=(224,224, 3)) rand_noise = np.clip(rand_noise, 0, 255.) first_pred = kmodel.predict(np.expand_dims(rand_noise, axis=0)) label = np.argmax(first_pred) attack = foolbox.attacks.ProjectedGradientDescentAttack(fmodel, threshold=.999, distance=foolbox.distances.Linfinity, criterion=ConfidentMisclassification(.999)) adversarial = attack(rand_noise[:, :, ::-1], label) ##ここです## noise_preds = kmodel.predict(np.expand_dims(adversarial, axis=0)) prediction, num = decode_predictions(noise_preds, top=20)[0][0][1:3] num = round(num * 100, 2) sum_pred.append(num) ax = fig.add_subplot(x,y,z) ax.annotate(prediction, xy=(0.1, 0.6), xycoords=ax.transAxes, fontsize=16, color='yellow') ax.annotate(f'{num}%', xy=(0.1, 0.4), xycoords=ax.transAxes, fontsize=20, color='orange') if new_row: ax.annotate(f'$\mu$:{mu}, $\sigma$:{sigma}' , xy=(-.2, 0.8), xycoords=ax.transAxes, rotation=90, fontsize=16, color='black') ax.imshow(adversarial / 255) # division by 255 to convert [0, 255] to [0, 1] ax.axis('off') for i in range(1,101): if (i-1) % 10==0: mu = mu_list.pop(0) sigma = sigma_list.pop(0) make_subplot(10,10, i, new_row=True) else: make_subplot(10,10, i) plt.show() #--------------------------------------------------

を実行しようとすると、最後の段落の##ここです##のところで

エラーメッセージ AssertionError Traceback (most recent call last) <ipython-input-3-9446ca790563> in <module>() 164 mu = mu_list.pop(0) 165 sigma = sigma_list.pop(0) --> 166 make_subplot(10,10, i, new_row=True) 167 else: 168 make_subplot(10,10, i) 1 frames /usr/local/lib/python3.7/dist-packages/foolbox/attacks/base.py in __call__(self, inputs, labels, unpack, individual_kwargs, **kwargs) 23 def __call__(self, inputs, labels, unpack=True, individual_kwargs=None, **kwargs): 24 assert isinstance(inputs, np.ndarray) ---> 25 assert isinstance(labels, np.ndarray) 26 27 if len(inputs) != len(labels): AssertionError:

というエラーが表示されてしまします。いろいろ調べてもわかりません。教えてほしいです。お願いします。

引用は、主にhttps://colab.research.google.com/drive/1bsmaB23bSEuu1zWyPSajDJ_DO3QqlovQ
こちらです。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

meg_

2021/11/23 15:46

エラー元はmake_subplot()の中のどの行か分かりますか? 質問のコードはterayetaさんが書かれたコードですか?(もし違う場合は引用元を明記された方が良いかと思います)
jbpb0

2021/11/24 01:51

この質問のコードには、 https://teratail.com/questions/370552 の私の回答の内容がほとんどそのまま反映されてます それは偶然でしょうか? それとも、質問者さんは、上記の質問をした人(退会済みユーザー)と同一人物なのでしょうか? それとも、同一人物ではなく、上記の質問の私の回答を参考にしてコードを書いたのでしょうか?
退会済みユーザー

退会済みユーザー

2021/11/24 03:25

参考にしました
jbpb0

2021/11/24 04:10

インデントを直してください ほとんどの行の行頭に、余分なスペースが付いてます
退会済みユーザー

退会済みユーザー

2021/11/24 05:50

このインテンドは、ここの質問にコピーするときに出てしまったミスです。申し訳ないです。 インテンドを直しても、このエラーが出てしまいます...。
jbpb0

2021/11/24 06:53 編集

インデントが間違ってると、他人がコードを実行して現象を確認するのに、とても手間がかかりますので、ちゃんと全部直してください 他にも、 color → olor、xycoords → ycoords の間違いとか、 print('Predicted:', > pp.pprint(decode_predictions(preds, top=20)[0])) conf_list = []> のように余計な「>」が付いてるとか、 import pprint as pp> import keras のように二行が一行につながってるとか、とにかく間違いが多すぎます 質問してるエラー以外は、まともに実行できるコードを質問に掲載してください 質問は編集できるので、質問者さんが実行してるコードそのものを掲載してください
退会済みユーザー

退会済みユーザー

2021/11/24 07:23

申し訳ございませんでした。 インテンドや、間違いを修正いたしました。
jbpb0

2021/11/24 07:44 編集

「def load_image(img_path: str):」のあたりが、まだ間違ってます 質問のエラーが出た時に実行したコードを、そのまま貼り付けてくれたらいいだけなんですけど Google Colabで新規ノートブックを作成して、そこの一つのセルに、この質問に掲載してるコードをそのまま全部貼り付けて、実行してみてください その時に、質問してるエラー以外のエラーが出ないようにしてください
退会済みユーザー

退会済みユーザー

2021/11/24 08:08

質問してるエラー以外のエラーがでないように修正いたしました。 何回も申し訳ございません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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