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

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

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

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

Python

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

Q&A

解決済

2回答

8625閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

CNN (Convolutional Neural Network)

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

Python

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

0グッド

0クリップ

投稿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/ツールのバージョンなど)

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

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

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

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

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

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

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) で、どうでしょうか?
退会済みユーザー

退会済みユーザー

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の利用方法」
退会済みユーザー

退会済みユーザー

2021/10/07 12:32

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

2021/10/07 12:43

border_mode='same' ↓ 変更 padding='same' かな?
退会済みユーザー

退会済みユーザー

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,) 勉強不足で申し訳ないのですが、このエラーは次元に問題があるということでしょうか。
guest

回答2

0

python

1from keras.utils.np_utils import to_categorical

↓ 変更

python

1from tensorflow.keras.utils import to_categorical

参考
ImportError: cannot import name 'get_config' from 'tensorflow.python.eager.context'

質問のコードには書かれてませんが、実際のコードでは「Sequential」とか「Convolution2D」とか「Activation」とかもインポートしてるはずです
その際に、

python

1from keras...

とやっていたら、それらも全部同様に

python

1from tensorflow.keras...

に変えてください (kerasとtensorflow.kerasを混ぜて使わず、どちらかに統一する)

参考
TensorFlowに組み込まれたKerasを使う方法
の「TensorFlow.Kerasの利用方法」
.

python

1 y_train=np_utils.to_categorical(y_train, nb_classes) 2 y_test=np_utils.to_categorical(y_test, nb_classes)

↓ 変更

python

1 y_train=to_categorical(y_train, nb_classes) 2 y_test=to_categorical(y_test, nb_classes)

 .

python

1 ...border_mode='same'...

↓ 変更

python

1 ...padding='same'...

投稿2021/10/08 06:57

jbpb0

総合スコア7651

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

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

0

ベストアンサー

from keras.utils.np_utils import to_categorical

from keras.utils import np_utils

に変更してください。

また、

pip install image
pip install np_utils

はエラーが出るはずですので、コメントにするか削除しましょう。

投稿2021/10/07 07:11

ppaul

総合スコア24666

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

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

退会済みユーザー

退会済みユーザー

2021/10/07 11:31

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

2021/10/07 12:43

調べてみたところでは、 from keras.utils import np_utils を from tensorflow.keras.utils import np_utils に変更すると動きそうです。 私もやってみたわけではありませんが、これでやってみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問