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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python

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

Q&A

解決済

1回答

1041閲覧

[python]モジュール導入におけるエラー

TKSoa

総合スコア1

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python

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

0グッド

0クリップ

投稿2021/08/30 10:45

前提・実現したいこと

https://qiita.com/neet-AI/items/2b3d7f743e4d6c6d8e10
こちらのサイトを元に画像分類を練習している者です。

サイト内でic_module.pyとして保存したモジュールのimportの際にこのようなエラーが出てしまいこの問題の解決策を探しています。

5つのクラスに分けた画像分類がしたく少し改変をしていますが大まかな流れなどはいじっていません、初心者の質問で申し訳ないのですが、どうか教えていただけると幸いです。

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

エラーメッセージ --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-16-0ccab3d1f85d> in <module> 3 4 i = 0 ----> 5 for filename in ic.filenames : 6 # ディレクトリ名入力 7 while True : AttributeError: module 'ic_module' has no attribute 'filenames'

該当のソースコード

コード

python

1import ic_module as ic 2import os.path as op 3 4i = 0 5for filename in ic.filenames : 6 7   while True : 8 dirname = input(">>「" + ic.ClassNames[i] + "」の画像のあるディレクトリ : ") 9 if op.isdir(dirname) : 10 break 11 print(">> そのディレクトリは存在しません!") 12 13 ic.PreProcess(dirname, filename, var_amount=3) 14 i += 1 15 16```読み込むモジュールであるic_module.pyは以下のコードを保存したものです 17```python 18コードimport glob 19import numpy as np 20 21from keras.preprocessing.image import load_img, img_to_array, array_to_img 22from keras.preprocessing.image import random_rotation, random_shift, random_zoom 23from keras.layers.convolutional import Conv2D 24from keras.layers.pooling import MaxPooling2D 25from keras.layers.core import Activation 26from keras.layers.core import Dense 27from keras.layers.core import Dropout 28from keras.layers.core import Flatten 29from keras.models import Sequential 30from keras.models import model_from_json 31from keras.callbacks import LearningRateScheduler 32from keras.callbacks import ModelCheckpoint 33from tensorflow.keras.optimizers import Adam 34from keras.utils import np_utils 35 36FileNames = ["1.npy", "2.npy", "3.npy","4.npy","5.npy"] 37ClassNames = ["s1","s2", "s3", "s4","s5"] 38hw = {"height":32, "width":32} 39 40 41#画像データの前処理 42def PreProcess(dirname, filename, var_amount=3): 43 num = 0 44 arrlist = [] 45 files = glob.glob(dirname + "/*.jpg") 46 47 for imgfile in files: 48 img = load_img(imgfile, target_size=(hw["height"], hw["width"])) # 画像ファイルの読み込み 49 array = img_to_array(img) / 255 # 画像ファイルのnumpy化 50 arrlist.append(array) # numpy型データをリストに追加 51 for i in range(var_amount-1): 52 arr2 = array 53 arr2 = random_rotation(arr2, rg=360) 54 arrlist.append(arr2) # numpy型データをリストに追加 55 num += 1 56 57 nplist = np.array(arrlist) 58 np.save(filename, nplist) 59 print(">> " + dirname + "から" + str(num) + "個のファイル読み込み成功") 60 61 62#モデルの構築 63def BuildCNN(ipshape=(32, 32, 3), num_classes=3): 64 model = Sequential() 65 66 model.add(Conv2D(24, 3, padding='same', input_shape=ipshape)) 67 model.add(Activation('relu')) 68 69 model.add(Conv2D(48, 3)) 70 model.add(Activation('relu')) 71 model.add(MaxPooling2D(pool_size=(2, 2))) 72 model.add(Dropout(0.5)) 73 74 model.add(Conv2D(96, 3, padding='same')) 75 model.add(Activation('relu')) 76 77 model.add(Conv2D(96, 3)) 78 model.add(Activation('relu')) 79 model.add(MaxPooling2D(pool_size=(2, 2))) 80 model.add(Dropout(0.5)) 81 82 model.add(Flatten()) 83 model.add(Dense(128)) 84 model.add(Activation('relu')) 85 model.add(Dropout(0.5)) 86 87 model.add(Dense(num_classes)) 88 model.add(Activation('softmax')) 89 90 adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) 91 model.compile(loss='categorical_crossentropy', 92 optimizer=adam, 93 metrics=['accuracy']) 94 return model 95 96 97#学習 98def Learning(tsnum=30, nb_epoch=50, batch_size=8, learn_schedule=0.9): 99 X_TRAIN_list = []; Y_TRAIN_list = []; X_TEST_list = []; Y_TEST_list = []; 100 target = 0 101 for filename in FileNames : 102 data = np.load(filename) # 画像のnumpyデータを読み込み 103 trnum = data.shape[0] - tsnum 104 X_TRAIN_list += [data[i] for i in range(trnum)] # 画像データ 105 Y_TRAIN_list += [target] * trnum # 分類番号 106 X_TEST_list += [data[i] for i in range(trnum, trnum+tsnum)] # 学習しない画像データ 107 Y_TEST_list += [target] * tsnum; # 学習しない分類番号 108 target += 1 109 110 X_TRAIN = np.array(X_TRAIN_list + X_TEST_list) # 連結 111 Y_TRAIN = np.array(Y_TRAIN_list + Y_TEST_list) # 連結 112 print(">> 学習サンプル数 : ", X_TRAIN.shape) 113 y_train = np_utils.to_categorical(Y_TRAIN, target) # 自然数をベクトルに変換 114 valrate = tsnum * target * 1.0 / X_TRAIN.shape[0] 115 116 # 学習率の変更 117 class Schedule(object): 118 def __init__(self, init=0.001): # 初期値定義 119 self.init = init 120 def __call__(self, epoch): # 現在値計算 121 lr = self.init 122 for i in range(1, epoch+1): 123 lr *= learn_schedule 124 return lr 125 126 def get_schedule_func(init): 127 return Schedule(init) 128 129 lrs = LearningRateScheduler(get_schedule_func(0.001)) 130 mcp = ModelCheckpoint(filepath='best.hdf5', monitor='val_loss', verbose=1, save_best_only=True, mode='auto') 131 model = BuildCNN(ipshape=(X_TRAIN.shape[1], X_TRAIN.shape[2], X_TRAIN.shape[3]), num_classes=target) 132 133 print(">> 学習開始") 134 hist = model.fit(X_TRAIN, y_train, 135 batch_size=batch_size, 136 verbose=1, 137 epochs=nb_epoch, 138 validation_split=valrate, 139 callbacks=[lrs, mcp]) 140 141 json_string = model.to_json() 142 json_string += '##########' + str(ClassNames) 143 open('model.json', 'w').write(json_string) 144 model.save_weights('last.hdf5') 145 146 model.save('./ic_module.h5') 147 148 149#試行・実験 150def TestProcess(imgname): 151 modelname_text = open("model.json").read() 152 json_strings = modelname_text.split('##########') 153 textlist = json_strings[1].replace("[", "").replace("]", "").replace("\'", "").split() 154 model = model_from_json(json_strings[0]) 155 model.load_weights("last.hdf5") # best.hdf5 で損失最小のパラメータを使用 156 img = load_img(imgname, target_size=(hw["height"], hw["width"])) 157 TEST = img_to_array(img) / 255 158 159 pred = model.predict(np.array([TEST]), batch_size=1, verbose=0) 160 print(">> 計算結果↓\n" + str(pred)) 161 print(">> この画像は「" + textlist[np.argmax(pred)].replace(",", "") + "」です。")

試したこと

当サイトにも過去同じコードに対してのコードの短縮を目指した質問がありましたのでそちらを参照しましたが解決には至りませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単に名前の大文字・小文字が一致していないだけでは?

diff

1-for filename in ic.filenames : 2+for filename in ic.FileNames:

投稿2021/08/30 11:02

Daregada

総合スコア11990

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

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

TKSoa

2021/08/30 16:04

返信して頂きありがとうございます。単純な確認作業が抜けていました、これからプログラミングを扱う際には重要な作業として念頭に入れさせていただきます。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問