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

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

ただいまの
回答率

87.50%

Pythonによる機械学習にて学習済みネットワークの呼び出しでのエラー

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 298

score 0

前提・実現したいこと

Python 3.8でKerasを用いて機械学習を行っています。
画像の学習→判定をするシステムを作成しようとしています。

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

Traceback (most recent call last):
  File "003train004.py", line 85, in <module>
    model.save_weights('../result/model.weight')
  File "C:\Users\babit\anaconda3\envs\p38\lib\site-packages\keras\engine\saving.py", line 449, in save_wrapper
    save_function(obj, filepath, overwrite, *args, **kwargs)
  File "C:\Users\babit\anaconda3\envs\p38\lib\site-packages\keras\engine\network.py", line 1183, in save_weights
    with h5py.File(filepath, 'w') as f:
  File "C:\Users\babit\anaconda3\envs\p38\lib\site-packages\h5py\_hl\files.py", line 312, in __init__
    fid = make_fid(name, mode, userblock_size, fapl, swmr=swmr)
  File "C:\Users\babit\anaconda3\envs\p38\lib\site-packages\h5py\_hl\files.py", line 148, in make_fid
    fid = h5f.create(name, h5f.ACC_TRUNC, fapl=fapl, fcpl=fcpl)
  File "h5py\_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py\_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py\h5f.pyx", line 98, in h5py.h5f.create
OSError: Unable to create file (unable to open file: name = '../result/model.weight', errno = 2, error message = 'No such file or directory', flags = 13, o_flags = 302)

該当のソースコード

import params as P
import os
from PIL import Image
import numpy as np
num_classes=0
n=0
first=True
for c in sorted(os.listdir(P.datadir)):
    print(c)
    for i in os.listdir(os.path.join(P.datadir,c)):
        im=Image.open(os.path.join(P.datadir,c,i))      
        img=np.zeros([1,P.W,P.H],dtype='uint8')
        for x in range(P.W):
            for y in range(P.H):
                img[0,x,y]=im.getpixel((y,x))
        label=np.zeros([1],dtype='uint8')
        label[0]=num_classes
        if first:
            img_array=np.asarray(img)
            label_array=np.asarray(label)
            first=False
        else:
            img_array=np.append(img_array,img,axis=0)
            label_array=np.append(label_array,label,axis=0)
        n+=1
    num_classes+=1
th=int(n*0.9)
train_data=np.zeros([th,P.W,P.H],dtype='uint8')
test_data=np.zeros([n-th,P.W,P.H],dtype='uint8')
train_teacher_labels=np.zeros([th],dtype='uint8')
test_teacher_labels=np.zeros([n-th],dtype='uint8')
perm=np.random.permutation(n)
for i in range(n):
    if i<th:
        train_data[i]=img_array[perm[i]]
        train_teacher_labels[i]=label_array[perm[i]]
    else:
        test_data[i-th]=img_array[perm[i]]
        test_teacher_labels[i-th]=label_array[perm[i]]
import keras
from keras import backend as Keras
if Keras.image_data_format()=='channels_first':
     train_data=train_data.reshape(
         train_data.shape[0],1,P.W,P.H)
     test_data=test_data.reshape(
         test_data.shape[0],1,P.W,P.H)
     input_shape=(1,P.W,P.H)
else:
     train_data=train_data.reshape(
         train_data.shape[0],P.W,P.H,1)
     test_data=test_data.reshape(
         test_data.shape[0],P.W,P.H,1)
     input_shape=(P.W,P.H,1)
train_data=train_data.astype('float32')
test_data=test_data.astype('float32')
train_data/=255
test_data/=255
train_teacher_labels=keras.utils.to_categorical(
    train_teacher_labels,num_classes)
test_teacher_labels=keras.utils.to_categorical(
    test_teacher_labels,num_classes)
from keras.models import Sequential
model=Sequential()
from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPooling2D
model.add(
     Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=input_shape))
model.add(Conv2D(64,(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes,activation='softmax'))
model.summary()
model.compile(optimizer=keras.optimizers.Adadelta(),
              loss=keras.losses.categorical_crossentropy,
              metrics=['accuracy'])
BATCH_SIZE=256
EPOCHS=10
fit_record=model.fit(train_data,train_teacher_labels,
                     batch_size=BATCH_SIZE,
                     epochs=EPOCHS,
                     verbose=1,
                     validation_data=(test_data,test_teacher_labels))
model.save_weights('../result/model.weight')
result_score=model.evaluate(test_data,test_teacher_labels,verbose=0)
print("loss    ",result_score[0])
print("accuracy",result_score[1])

試したこと

学習のやり直し

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • meg_

    2020/09/03 09:43

    '../result'は存在していますか?

    キャンセル

  • suwato-taro

    2020/09/03 14:22

    いま確認したら無かったのでresultを作成したらいけました!
    ありがとうございます( ;∀;)

    キャンセル

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

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

  • ただいまの回答率 87.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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