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

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

新規登録して質問してみよう
ただいま回答率
87.20%
CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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

解決済

CNNを用いて画像認識でエラー np_utils Python

gdgd_tink
gdgd_tink

総合スコア15

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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

2回答

0評価

0クリップ

751閲覧

投稿2021/10/07 06:07

編集2021/10/07 11:30

前提・実現したいこと

Pythonでtensorflowと自作の画像データでCNNを実装しています。
画像認識を行いたいのですが、学習段階でエラーが出てしまい躓いています。

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

name 'np_utils' is not defined

該当のソースコード

import urllib.request as req import urllib.parse as parse import os, re, time from PIL import Image import os, glob import numpy as np from keras.utils.np_utils import to_categorical root_dir=r'C:\Users\Fashion' categories=['Blouse','Jacket','Jeans','Parka','Skirt','Tee'] nb_classes=len(categories) image_size=100 X=[] Y=[] def padding(cat, fname, is_train): img=Image.open(fname) img=img.convert("RGB") #RGB変換 img=img.resize((image_size,image_size)) #画像サイズ変更(100×100) data=np.array(img) #numpy形式に変換 X.append(data) Y.append(cat) #学習データのみ水増しするので学習データではない場合は以下のfor文を実行しない if not is_train: return for angle in range(-20, 20, 10): #画像の回転 img2=img.rotate(angle) data=np.asarray(img2) X.append(data) Y.append(cat) #画像の左右反転 img3=img.transpose(Image.FLIP_LEFT_RIGHT) data=np.asarray(img3) X.append(data) Y.append(cat) #カテゴリーごとの処理 def make_train(files, is_train): global X,Y X=[] Y=[] for cat, fname in files: padding(cat, fname, is_train) return np.array(X), np.array(Y) #ディレクトリーごとにファイルを収集する files_all=[] for idx, cat in enumerate(categories): image_dir=root_dir+'/'+cat files=glob.glob(image_dir+'/*.jpg') for f in files: files_all.append((idx, f)) import random, math #シャッフル random.shuffle(files_all) MATH=math.floor(len(files_all)*0.6) train=files_all[0:MATH] test=files_all[MATH:] # データをロード def main(): X_train, y_train=make_train(train,True) X_test, y_test=make_train(test,False) # データを正規化する X_train=X_train.astype("float") / 256 X_test=X_test.astype("float") / 256 y_train=np_utils.to_categorical(y_train, nb_classes) y_test=np_utils.to_categorical(y_test, nb_classes) # モデルを学習し評価する model=model_train(X_train, y_train) model_eval(model, X_test, y_test) # モデルを構築 def build_model(in_shape): model=Sequential() model.add(Convolution2D(64 , 3, 3, border_mode='same',input_shape=in_shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Convolution2D(128, 3, 3, border_mode='same')) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Convolution2D(128, 3, 3)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(1028)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(nb_classes)) model.add(Activation('softmax')) model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy']) model.summary() return model # 学習 def model_train(X, y): model=build_model(X.shape[1:]) model.fit(X, y, batch_size=30, nb_epoch=30) return model # 評価 def model_eval(model, X, y): score=model.evaluate(X, y) print('loss=', score[0]) print('accuracy=', score[1]) if __name__=="__main__": main()

試したこと

np_utilsについて調べていろいろやったのですが、

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

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

jbpb0

2021/10/07 08:56

y_train=np_utils.to_categorical(y_train, nb_classes) y_test=np_utils.to_categorical(y_test, nb_classes) ↓ 変更 y_train=to_categorical(y_train, nb_classes) y_test=to_categorical(y_test, nb_classes) で、どうでしょうか?
gdgd_tink

2021/10/07 11:32

変更してやってみたのですが、 ImportError: cannot import name 'get_config' from 'tensorflow.python.eager.context' このようなエラーが出てしまいました。これはインストールに何か問題があるということでしょうか。
jbpb0

2021/10/07 12:13 編集

私が上のコメントで書いた変更に加えて、下記も変更してみてください from keras.utils.np_utils import to_categorical ↓ 変更 from tensorflow.keras.utils import to_categorical 参考 https://stackoverflow.com/questions/66964492/importerror-cannot-import-name-get-config-from-tensorflow-python-eager-conte それと、質問のコードには書かれてませんが、実際のコードでは「Sequential」とか「Convolution2D」とか「Activation」とかもインポートしてるはずです その際に、 from keras... とやっていたら、それらも全部同様に from tensorflow.keras... に変えてください 参考 https://dev.infohub.cc/use-tensorflow-keras/#TensorFlowKeras-2 の「TensorFlow.Kerasの利用方法」
gdgd_tink

2021/10/07 12:32

ご丁寧に参考までありがとうございます。 先ほどまでのエラーは無くなったのですが、 TypeError: ('Keyword argument not understood:', 'border_mode') このようなエラーが出てきてしまいました。 質問してばかりで申し訳ないのですが、もしお分かりであれば教えて頂きたいです。
jbpb0

2021/10/07 12:43

border_mode='same' ↓ 変更 padding='same' かな?
gdgd_tink

2021/10/07 12:58

ありがとうございます。 ValueError: Input 0 of layer conv2d is incompatible with the layer: : expected min_ndim=4, found ndim=1. Full shape received: (None,) 勉強不足で申し訳ないのですが、このエラーは次元に問題があるということでしょうか。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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