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

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

ただいまの
回答率

90.52%

  • Python

    7902questions

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

  • Chainer

    142questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

No module named models.Alexというエラーについて

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 229

gab76

score 0

 前提・実現したいこと

下記のサイト
https://qiita.com/ohnabe/items/dc915c06ef37a2d30799
を参考にして、adversarial examplesの実行を試みておりますが、
No module named models.Alexというエラーに遭い、行き詰まってしまいました。

当方、python超初心者ですが、解決法をご教授いただけたらと思います。

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

  File "create_as.py", line 9, in <module>
    import models.Alex
ImportError: No module named models.Alex

 ソースコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import chainer
import chainer.functions as F
from chainer.links.caffe import CaffeFunction
import pickle
import models.Alex
from PIL import Image

from adv_models.fast_gradient import fast_gradient
from adv_models.iterative_gradient import iterative_gradient
from adv_models.iterative_least_likely import iterative_least_likely


IMAGENET_MEAN_FILE = "../data/ilsvrc_2012_mean.npy"
INPUT_IMAGE_SIZE = 227

def load_caffemodel(model_path):
    caffe_model = CaffeFunction(model_path)
    return caffe_model


def save_models(caffe_model, save_model_path):
    with open(save_model_path, 'wb') as f:
        pickle.dump(caffe_model, f)


def load_models(save_model_path):
    with open(save_model_path, 'rb') as f:
        model = pickle.load(f)
        return model


def copy_model(src, dst):
    assert isinstance(src, chainer.Chain)
    assert isinstance(dst, chainer.Chain)
    for child in src.children():
        if child.name not in dst.__dict__: continue
        dst_child = dst[child.name]
        if type(child) != type(dst_child): continue
        if isinstance(child, chainer.Chain):
            copy_model(child, dst_child)
        if isinstance(child, chainer.Link):
            match = True
            for a, b in zip(child.namedparams(), dst_child.namedparams()):
                if a[0] != b[0]:
                    match = False
                    break
                if a[1].data.shape != b[1].data.shape:
                    match = False
                    break
            if not match:
                print('Ignore %s because of parameter mismatch' % child.name)
                continue
            for a, b in zip(child.namedparams(), dst_child.namedparams()):
                b[1].data = a[1].data
            print('Copy %s' % child.name)


def create_mean_image_array(pic_mean_data_path, size_image):
    mean_data = np.load(pic_mean_data_path)
    mean_data = Image.fromarray(mean_data.astype(np.uint8), 'RGB').resize((size_image, size_image))
    mean_data = np.asarray(mean_data).astype(np.float32)
    return mean_data


def substract_mean_image(target_array, mean_array):
    # mean_value: 104 B
    # mean_value: 117 G
    # mean_value: 123 R
    result_array = target_array - mean_array
    return result_array


def add_mean_image(target_array, mean_array):
    result_array = target_array + mean_array
    return result_array


def resize_image(original_image_path):
    img = Image.open(original_image_path)
    print("original image format:{} {}".format(img.size, img.mode))

    img_resize = img.resize((INPUT_IMAGE_SIZE, INPUT_IMAGE_SIZE))
    print("resize image format:{} {}".format(img_resize.size, img_resize.mode))
    return img_resize


def format2chainer(img_data):
    # RGB to GBR
    arrayImg = np.asarray(img_data).astype(np.float32)[:, :, ::-1]
    # HWC to CWH
    arrayImg = arrayImg.transpose(2, 0, 1)
    # 3-dimensions to 4-dimensions
    arrayImg = arrayImg.reshape((1,) + arrayImg.shape)
    return arrayImg


def format2orig(chainer_img):
    # CWH to HWC
    #orig_image = chainer_img.transpose(1, 2, 0).astype(np.uint8)
    orig_image = chainer_img.transpose(1, 2, 0)
    # BGR to RGB
    orig_image = orig_image[:,:,::-1]
    return orig_image


def create_label_list(label_file_path):
    label_d = {}
    with open(label_file_path, "r") as f:
        for line in f:
            line = line.rstrip("\n").strip(" ").split(":")
            if len(line) == 2:
               label_d[int(line[0])] = line[1].strip(" ")
    return label_d


def get_result(predict_result, label_d):
    prob = np.max(predict_result)
    label_ind = np.argmax(predict_result)
    label = label_d[label_ind]
    return prob, label_ind, label


if __name__ == '__main__':
    #model = load_caffemodel("models/bvlc_alexnet.caffemodel")
    #save_models(model, "models/alexnet.chainermodel")

    caffe_model = load_models("../models/alexnet.chainermodel")
    chainer_model = models.Alex.Alex()

    # get label dict
    label_d = create_label_list("../data/imagenet_label.txt")

    # copy caffe_model W, b to chainer_model
    copy_model(caffe_model, chainer_model)

    # create mean image array
    mean_image_array = create_mean_image_array(IMAGENET_MEAN_FILE, INPUT_IMAGE_SIZE)

    # predict target_image
    orig_img = resize_image("../data/panda2.jpeg")
    orig_img.show()

    orig_array = np.asarray(orig_img)
    orig_array = substract_mean_image(orig_array, mean_image_array)

    chainer_array = format2chainer(orig_array)

    # apply gradient sign method
    #adv_array, adv_part_array, orig_result = fast_gradient(chainer_model, chainer_array, eps=8.0)

    # apply iterative gradient sign method
    #adv_array, adv_part_array, orig_result = iterative_gradient(chainer_model, chainer_array,
    #                                                                    eps=8.0, alpha=1.0)

    # apply iterative least likely class method
    adv_array, adv_part_array, orig_result = iterative_least_likely(chainer_model, chainer_array,
                                                                    eps=8.0, alpha=1.0)
    least_ind = np.argmin(orig_result)
    print("least likely category {}".format(label_d[least_ind]))

    # predict original image_result
    orig_prob, orig_ind, orig_label = get_result(orig_result, label_d)
    print("predict_original_image: {} predict_prob: {}".format(orig_label.strip(" "), orig_prob))

    # predict adversarial_image
    predict_result = F.softmax(chainer_model(adv_part_array)).data
    part_prob, part_label_ind, part_label = get_result(predict_result, label_d)
    print("predict_adversarial_perturbations: {} predict_prob: {}".format(part_label, part_prob))

    predict_result = F.softmax(chainer_model(adv_array)).data
    adv_prob, adv_label_ind, adv_label = get_result(predict_result, label_d)
    print("predict_adversarial_examples: {} predict_prob: {}".format(adv_label, adv_prob))
    print("original category prob with adv_images {}".format(predict_result[0][orig_ind]))

    # show adv_image
    adv_array = format2orig(adv_array[0])
    adv_part_array = format2orig(adv_part_array[0])
    adv_array = add_mean_image(adv_array, mean_image_array)
    adv_array = np.clip(adv_array, 0, 255)
    adv_array = adv_array.astype(np.uint8)
    Image.fromarray(adv_array, 'RGB').show()
    Image.fromarray(adv_part_array, 'RGB').show()

        

 補足情報(FW/ツールのバージョンなど)  

   開発環境   macOS High Sierra 10.13.1   python 2.7.10   chainer 4.2.0

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2018/07/13 13:55

    エラーメッセージだけではなく、create_as.py のソースコードも質問に記載してください。

    キャンセル

  • gab76

    2018/07/13 16:28

    CHERRY様、ご指摘ありがとうございます。ソースコードの方も追加致しました。

    キャンセル

回答 1

0

モジュールが足りていないように見受けます。

ソースコードはどうやって作ったのでしょうか?
参考にしたサイトがあれば、そのサイトに書いてあるファイルをきちんと作っているかを確認したほうが良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    RNNのサンプルコードについて

    python3.5で動作しています。 こちらの和訳ページ を元にサンプルのコードを記述したのですが、エラーにより動作しませんでした。エラー文としてはどうやらどこかの入力にnp.

  • 解決済

    chainerのImportError: No module

    前提・実現したいこと https://github.com/mitmul/deeppose こちらのdeep poseを実装中のエラーです サーバー上に全てのデータを置き、チュ

  • 解決済

    list index out of range のエラー修正

    コード import numpy as np import chainer from chainer import cuda,Function,report,training,ut

  • 解決済

    chainerで学習結果の保存・読み込みを行いたいが、object has no attribute...

    Python3、Chainerでニューラルネットワークの勉強をしています。 適当なサンプルコードを書いて、学習結果の保存・読み込みを行おうと思っています。 学習自体は目的ではなく、

  • 解決済

    ニューラルネットワークを使い「掛け算」の学習をしたい

    chainerを使って、ニューラルネットワークの勉強をしています。 先日はモデル・オプティマイザーの保存についてご教示いただきありがとうございました。 引き続き、色々調査してい

  • 解決済

    chainerによるCNN構築時のエラーに対処できません。

    現在、CNNを用いて画像の2値分類を実行しようとしています。 画像は縦5横20チャンネル数3で、それぞれに0か1が割り当てられています。 またそれぞれの画像は1枚ずつあります(訓練

  • 解決済

    データセットの作り方がわからない

     前提・実現したいこと 「ゼロから作るディープラーニング」を読み終えた学生です。 せっかくディープラーニングをかじり始めたため、自分に役に立つことをディープラーニングを利用してやっ

  • 解決済

    Pythonの文法について

    x = x[None, ...] この処理は一体どのようなものなのでしょうか? Chainerの勉強において、推論を行うために入力をミニバッチの形にするとあったのですが、Pyth

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

  • Python

    7902questions

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

  • Chainer

    142questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。