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

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

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

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

Python

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

Q&A

解決済

1回答

1136閲覧

google colaboratoryでのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Google Colaboratory

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

Python

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

0グッド

0クリップ

投稿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
こちらです。

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

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

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

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

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

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

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

回答1

0

ベストアンサー

Examples
に記載のコード例では「attack = foolbox.v1.attacks.FGSM(fmodel)」と「v1」が付いてるので、下記のように同様に変更したらエラーが出ずに実行できました

python

1 attack = foolbox.attacks.ProjectedGradientDescentAttack(fmodel, threshold=.999,

↓ 変更

python

1 attack = foolbox.v1.attacks.ProjectedGradientDescentAttack(fmodel, threshold=.999,

投稿2021/11/24 08:22

jbpb0

総合スコア7651

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

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

jbpb0

2021/11/24 08:29

https://foolbox.readthedocs.io/en/v2.4.0/user/examples.html には、「attack = foolbox.attacks.FGSM(fmodel)」のように「v1」が付いてない例もあるので、どういう場合に「v1」を付けないといけないのかは、分りません 質問者さんご自身が「foolbox」のドキュメント等を読んで、判断してください
退会済みユーザー

退会済みユーザー

2021/11/24 09:43

実行してみると、エラーが出ずに進めることができました。ありがとうございました。 質問の方法など、ご迷惑をお掛けして申し訳ございませんでした。 次回から、気を付けたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問