実現したいこと
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
どこで発生したかなどが分かるように、エラーは全文(Traceback)を提示ください。
申し訳ございません。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
cnn.h5はどうやって作成されましたか?
mode1.save('./cnn.h5')
という式を用いてkerasのモデルを保存してます
> testpic ="C:\\Users\\ユーザ名\\"
> img = load_image(testpic)
「testpic」には、画像のファイル名も付けるのでは?
【追記】
エラーが出てる行は、それよりも前ですね
失礼しました
こちらがそのコードとなります
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()
回答ありがとうございます。
画像のところ確かに抜けてましたありがとうございます。しかしそれ直してもいまだにエラーのままで、、、、
すみません。エラーが出ている行がわからなくて教えていただいてもよろしいでしょうか。
position 41というのは、41列目なのかなと思ったのですがそもそも32行しかなく、、、、
> Trackbackは以下になります
> こちらがそのコードとなります
ここに書くのではなく、質問を編集して追記してください
> エラーが出ている行がわからなくて
「Trackback」に
> File c:\users\ユーザ名\test\t.py:22
model = load_model(keras_param)
と書かれてます
学習(「cnn.h5」を作成)時と、推論時の、tensorflowとkerasのバージョンは、同じでしょうか?
ありがとうございます
先輩のコードを引き継いだのでそこで相違が出たかもしれないです、、、確認してみますありがとうございます。
回答1件
あなたの回答
tips
プレビュー