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

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

新規登録して質問してみよう
ただいま回答率
85.44%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Q&A

解決済

1回答

1716閲覧

UnicodeDecodeError 0xfd

students

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

0グッド

0クリップ

投稿2023/05/12 06:55

実現したいこと

pythonのコードのエラーを直したい。

前提

Anacondaのspyderを用いて画像認識のプログラム作成を行ったところエラーが表示されました。
おそらく文字についての不適合があるのだと思いますが、対処法がわかりません。
ご教授いただけると嬉しいです。

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

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfd in position 41: invalid start byte

該当のソースコード

python

1import keras 2import sys, os 3import numpy as np 4from PIL import Image 5from keras.models import load_model 6 7imsize = (32, 32) 8 9testpic ="C:\\Users\\ユーザ名\\" 10keras_param = "./cnn.h5" 11 12def load_image(path): 13 img = Image.open(path) 14 img = img.convert('RGB') 15 # 学習時に、(64, 64, 3)で学習したので、画像の縦・横は今回 変数imsizeの(64, 64)にリサイズします。 16 img = img.resize(imsize) 17 # 画像データをnumpy配列の形式に変更 18 img = np.asarray(img) 19 img = img / 255.0 20 return img 21 22model = load_model(keras_param) 23img = load_image(testpic) 24prd = model.predict(np.array([img])) 25print(prd) # 精度の表示 26prelabel = np.argmax(prd, axis=1) 27if prelabel == 0: 28 print(">>> true") 29 print(prd) 30elif prelabel == 1: 31 print(">>> false") 32 print(prd) 33

試したこと

\や"をほかの文字に変えたがエラーがそのまま吐き出された。

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

python 3.10.9
Anaconda-spyder

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

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

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

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

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

can110

2023/05/12 07:02

どこで発生したかなどが分かるように、エラーは全文(Traceback)を提示ください。
students

2023/05/12 07:09

申し訳ございません。Trackbackは以下になります Traceback (most recent call last): File ~\anaconda\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec exec(code, globals, locals) File c:\users\ユーザ名\test\t.py:22 model = load_model(keras_param) File ~\anaconda\lib\site-packages\keras\saving\saving_api.py:212 in load_model return legacy_sm_saving_lib.load_model( File ~\anaconda\lib\site-packages\keras\utils\traceback_utils.py:70 in error_handler raise e.with_traceback(filtered_tb) from None File ~\anaconda\lib\site-packages\tensorflow\python\lib\io\file_io.py:703 in is_directory_v2 return _pywrap_file_io.IsDirectory(compat.path_to_bytes(path)) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfd in position 41: invalid start byte
meg_

2023/05/12 07:14

cnn.h5はどうやって作成されましたか?
students

2023/05/12 07:22

mode1.save('./cnn.h5') という式を用いてkerasのモデルを保存してます
jbpb0

2023/05/12 07:24 編集

> testpic ="C:\\Users\\ユーザ名\\" > img = load_image(testpic) 「testpic」には、画像のファイル名も付けるのでは? 【追記】 エラーが出てる行は、それよりも前ですね 失礼しました
students

2023/05/12 07:23

こちらがそのコードとなります from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense from keras.optimizers import RMSprop import numpy as np # TensorFlow1系 # from keras.optimizers import RMSprop # エラー(ImportError: cannot import name 'RMSprop' from 'keras.optimizers' (/usr/local/lib/python3.7/dist-packages/keras/optimizers.py))が発生 # from tensorflow.keras.optimizers import RMSprop # TensorFlow2系 from keras.utils import np_utils import keras import numpy as np # indexを教師ラベルとして割り当てるため、0にはdogを指定し、1には猫を指定 classes = ["t", "f"] num_classes = len(classes) image_size = 64 """ データを読み込む関数 """ def load_data(): X_train, X_test, y_train, y_test = np.load("./tf.npy", allow_pickle=True) print(X_train.shape) print(np.load("./tf.npy", allow_pickle=True)) # 入力データの各画素値を0-1の範囲で正規化(学習コストを下げるため) X_train = X_train.astype("float") / 255 X_test = X_test.astype("float") / 255 # to_categorical()にてラベルをone hot vector化 y_train = np_utils.to_categorical(y_train, num_classes) y_test = np_utils.to_categorical(y_test, num_classes) return X_train, y_train, X_test, y_test """ モデルを学習する関数 """ def train(X, y, X_test, y_test): model = Sequential() model.add(Conv2D(32,(3,3), padding='same',input_shape= X.shape[1:]) ) model.add(Activation('relu')) model.add(Conv2D(32,(3,3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.1)) model.add(Conv2D(64,(3,3), padding='same')) model.add(Activation('relu')) model.add(Conv2D(64,(3,3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(2)) # tとfを識別するため、2クラス分類のため2を指定 model.add(Activation('softmax')) # https://keras.io/ja/optimizers/ # 今回は、最適化アルゴリズムにRMSpropを利用 opt = RMSprop(lr=0.00005, decay=1e-6) # https://keras.io/ja/models/sequential/ model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy']) model.fit(X, y, batch_size=28, epochs=40) # HDF5ファイルにKerasのモデルを保存 model.save('./cnn.h5') return model """ メイン関数 データの読み込みとモデルの学習を行います。 """ def main(): # データの読み込み X_train, y_train, X_test, y_test = load_data() print(X_train.shape) # モデルの学習 model = train(X_train, y_train, X_test, y_test) main()
students

2023/05/12 07:35

回答ありがとうございます。 画像のところ確かに抜けてましたありがとうございます。しかしそれ直してもいまだにエラーのままで、、、、 すみません。エラーが出ている行がわからなくて教えていただいてもよろしいでしょうか。 position 41というのは、41列目なのかなと思ったのですがそもそも32行しかなく、、、、
jbpb0

2023/05/12 07:35

> Trackbackは以下になります > こちらがそのコードとなります ここに書くのではなく、質問を編集して追記してください
jbpb0

2023/05/12 07:36

> エラーが出ている行がわからなくて 「Trackback」に > File c:\users\ユーザ名\test\t.py:22 model = load_model(keras_param) と書かれてます
jbpb0

2023/05/12 07:38

学習(「cnn.h5」を作成)時と、推論時の、tensorflowとkerasのバージョンは、同じでしょうか?
students

2023/05/12 07:45 編集

ありがとうございます 先輩のコードを引き継いだのでそこで相違が出たかもしれないです、、、確認してみますありがとうございます。
guest

回答1

0

ベストアンサー

UnicodeDecodeError in load_modelと同じ現象だと思います。
return _pywrap_file_io.IsDirectory(compat.path_to_bytes(path))で引っかかっているところからなんとなくバグのような気がします。

とりあえず./cnn.h5の絶対パスが日本語を含む場合は別の場所に配置して絶対パスで指定してみたり

Python

1from pathlib import Path 2keras_param = "./cnn.h5" 3keras_param = Path(keras_param)

のようなPathオブジェクトを利用することでエラー発生場所のパス文字列処理を回避できないか試してみるとよいかと思います。

投稿2023/05/12 07:47

can110

総合スコア38306

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

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

students

2023/05/12 07:57

プログラムコードからすべて日本語の含まない場所に移動させたらエラーをはかなくなりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問