前提・実現したいこと
初めて機械学習をGoogle colaboratryでkerasを用いて勉強していました。モデルを作るまでは出来たのですが、いざモデルを読み込もうとすると”No file or directory found at model.h5”というエラーが出てしまいました。しかしmodel.h5ファイルはipymbファイルと同じフォルダーに保存してあります。teratailやGoogle colaboratry共に使うのが初めてで分からないことだらけなのですがどなたか教えて下さると幸いです…
発生している問題・エラーメッセージ
エラーメッセージ ``````OSError Traceback (most recent call last) <ipython-input-1-6210d8ecd14b> in <module>() 4 import keras 5 ----> 6 model = keras.models.load_model('model.h5', compile=False) 7 classes = pickle.load(open('classes.sav', 'rb')) 8 1 frames /usr/local/lib/python3.7/dist-packages/keras/saving/save.py in load_model(filepath, custom_objects, compile, options) 202 if isinstance(filepath_str, str): 203 if not tf.io.gfile.exists(filepath_str): --> 204 raise IOError(f'No file or directory found at {filepath_str}') 205 206 if tf.io.gfile.isdir(filepath_str): OSError: No file or directory found at model.h5
該当のソースコード
Python
1コード 2```import os 3import cv2 4import numpy as np 5import glob as glob 6import pickle 7from sklearn.model_selection import train_test_split 8from keras.utils import np_utils 9from keras.applications.vgg16 import VGG16 10from keras.models import Sequential 11from keras.models import model_from_json 12from keras.models import Model 13from keras.layers import Input, Activation, merge, Dense, Flatten,Dropout 14from tensorflow.keras.optimizers import Adam 15 16 17path = "/content/drive/MyDrive/perfume" 18folders = os.listdir(path) 19 20classes = [f for f in folders if os.path.isdir(os.path.join(path,f))] 21n_classes = len(classes) 22 23X = [] 24Y = [] 25 26for label,class_name in enumerate(classes): 27 files = glob.glob(path + "/" + class_name+ "/*.jpg") 28 for file in files: 29 img = cv2.imread(file) 30 img = cv2.resize(img,dsize=(224,224)) 31 X.append(img) 32 Y.append(label) 33 34X = np.array(X) 35X = X.astype("float32") 36X /= 255.0 37 38 39Y = np.array(Y) 40Y = np_utils.to_categorical(Y,n_classes) 41Y[:5] 42 43X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2) 44print(X_train.shape) 45print(X_test.shape) 46print(Y_train.shape) 47print(Y_test.shape) 48 49input_tensor = Input(shape=(224,224,3)) 50 51base_model = VGG16(weights="imagenet",input_tensor=input_tensor,include_top=False) 52 53top_model = Sequential() 54top_model.add(Flatten(input_shape=base_model.output_shape[1:])) 55top_model.add(Dense(n_classes, activation="softmax")) 56 57model = Model(inputs=base_model.input,outputs=top_model(base_model.output)) 58 59for layer in model.layers[:15]: 60 layer.trainable = False 61 62print("# layers=",len(model.layers)) 63 64model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"]) 65 66model.summary() 67 68model.fit(X_train,Y_train, epochs=100,batch_size=100) 69 70score = model.evaluate(X_test, Y_test, batch_size=100) 71 72pickle.dump(classes, open("classes.sav","wb")) 73 74model.save("model.h5")
Python
1コード 2```from keras.models import load_model 3import pickle 4import cv2 5import keras 6 7model = keras.models.load_model('model.h5', compile=False) 8classes = pickle.load(open('classes.sav', 'rb')) 9 10img = cv2.imread('sample/sample.jpg') 11img = cv2.resize(img,dsize=(224,224)) 12img = img.astype('float32') 13img /= 255.0 14img = img[None, ...] 15 16img = cv2.imread('sample/sample.jpg') 17cv2.imwrite('output/' + str(classes[pred])+ '/sample.jpg',img)
試したこと
モデルを作り直したりファイル名を変えたりしてみましたが出来ませんでした… 僕が初心者なこともありお手上げ状態です…
補足情報
ファイルは機械学習というファイルの下に機械学習.ipynbとclasses.sav、model.h5とoutput、sampleというファイルを置いています。
こちらのサイトを参考にしました。
https://sasuwo.org/image-classification/#toc3

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/18 02:43 編集