前提・実現したいこと
プログラミング、機械学習初心者です。知識不足ですがよろしくお願いします。
初心者がてら、qitta上の興味のあるページで行っている実装を、そのままコピペして自分の環境でも実装してみたいと思い、
以下のサイトを参考にし、同じ事を実装しようとしました。
https://qiita.com/taku-buntu/items/305d8eb16e9502b09ed1
使用したのはここで紹介している以下のgithubのコードで、同じjupyterで実装しました。
https://github.com/taku-buntu/killme_adversarial_example_with_TensorFlow-Keras
in[5]まではエラーが出なかったのですが、
in[6]のfinetuningを行う所で以下のようなエラーが出てしまいました。
どの様に対処すればエラーが出ないのか教えて頂きたいです。
エラーメッセージ
ValueError Traceback (most recent call last)
<ipython-input-6-ce0f8b31cc97> in <module>
1 batch_size = 32
2
----> 3 vgg16 = tf.keras.applications.VGG16(include_top=False, weights='imagenet', classes=7, input_shape=(128, 128, 3))
4 vgg16.trainable = False
5
~\Miniconda3\envs\mykeras\lib\site-packages\tensorflow\python\keras\applications\vgg16.py in VGG16(include_top, weights, input_tensor, input_shape, pooling, classes)
125 data_format=K.image_data_format(),
126 require_flatten=include_top,
--> 127 weights=weights)
128
129 if input_tensor is None:
~\Miniconda3\envs\mykeras\lib\site-packages\tensorflow\python\keras\applications\imagenet_utils.py in _obtain_input_shape(input_shape, default_size, min_size, data_format, require_flatten, weights)
306 if input_shape[0] != 3 and weights == 'imagenet':
307 raise ValueError('The input must have 3 channels; got '
--> 308 'input_shape=' + str(input_shape) + '
')
309 if ((input_shape[1] is not None and input_shape[1] < min_size) or
310 (input_shape[2] is not None and input_shape[2] < min_size)):
ValueError: The input must have 3 channels; got input_shape=(128, 128, 3)
補足情報(FW/ツールのバージョンなど)
win10
python3.6.6
jupyter
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
ベストアンサー
top_model = tf.keras.Model(inputs=inputs, outputs=out) model = tf.keras.Model(inputs=vgg16.input, outputs=top_model(vgg16.output))
を
top_model = tf.keras.models.Model(inputs=inputs, outputs=out) model = tf.keras.models.Model(inputs=vgg16.input, outputs=top_model(vgg16.output))
にした以外はそのままのコードで動きましたよ。
TensorFlow のバージョンは 1.4.1
です。
いくつのバージョンのをお使いなのでしょうか?
追記
元の Notebook は不完全な点が見受けられたので、書き直しました。
キルミーの学習済みモデルで行うAdvarsal Example
キルミーの方は各クラスのデータ数が以下のようになっており、汎化性能のある分類器をつくるという点では完全にデータ不足です。
class name: agiri class id: 0 number of images: 44 class name: botsu class id: 1 number of images: 10 class name: others class id: 2 number of images: 64 class name: sonya class id: 3 number of images: 175 class name: yasuna class id: 4 number of images: 341 class name: yasuna&agiri class id: 5 number of images: 4 class name: yasuna&sonya class id: 6 number of images: 47
そのため、ImageNet の VGG16 学習済みモデルで Advarsal Example を作成する例も記載しました。
猫をくじゃくと誤認させる Adversal Example を生成させています。
実行には imagenet_class_index.json を ipynb と同じディレクトリにダウンロードして、置いてください。
ImageNet の学習済みモデルで行うAdvarsal Example
追記
キルミーのほうは学習データが少なすぎて、仮に100%近い精度が出たとしてもそれはあくまで学習したデータに対してなので、汎化性能はないでしょうし、意味がないと考えています。
もしやるなら、キルミーではなく、最初から「26クラス約3000枚の画像」のほうでやってみたらどうでしょうか。
収束しないときは以下をいろいろ変えてみるとよいと思います。
x = Dense(100, activation='relu')(x) # 識別層の次元数 x = Dropout(0.5)(x) # ドロップアウトの脱落率 model.compile(loss='categorical_crossentropy', # 学習方法 optimizer='adam', metrics=['accuracy'])
エラーですが、sample.jpg は適当に用意して ipynb と同じディレクトリに配置してください。猫を使いましたが、犬とか鳥とか ImageNet の 1000 カテゴリならなんでもいいです。
投稿2018/10/25 03:09
編集2018/11/06 05:36総合スコア21960
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。