🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

1719閲覧

機械学習用データセットのフォルダ分け、読み込み

nomonomo

総合スコア5

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2019/12/25 16:20

自作の画像を使ってCNNで機械学習をしています。現在のディレクトリ構成は

・main.py
・training.py
・image--a--画像フォルダ(クラス分の数)

となっており、main.pyでimage/a/のフォルダ内にある全ての画像フォルダ内の画像にそれぞれラベルをつけた後、.npz形式に出力します。画像フォルダはクラス分存在します。
その.npzファイルをあとで読み込み、ランダムにシャッフルして訓練、テストを行っています(現在の動作はうまくいっているので、コードは問題ないはずです)。

この形式を、
image--train--画像フォルダ(クラス分の数)
image--test --画像フォルダ(クラス分の数)
とし、あらかじめtrainとtestが分かれた状態で学習をさせるよう変更したいです。
というのもクラスによって水増し画像を入れたり入れなかったり調整したいと考えているからです。test側の画像には水増し画像は入れませんので、train_test_splitを使って混ぜてしまうのではなく、事前に分けておくべきだと考えました。

複数npzファイルを生成して繋げればよいのでしょうか?ご教授いただきたいです。

python

1コード 2#main.py 3import os, glob,random 4import cv2 5import numpy as np 6folda="a" 7outfile = "image_2/deepl_"+folda+".npz" 8max_photo=10000 9photo_size_t=400 10photo_size_y=400 11x=[] 12y=[] 13path="./image_2/"+folda 14files =os.listdir(path) 15files_dir=[f for f in files if os.path.isdir(os.path.join(path,f))] 16 17def main(): 18 n=0 19 for i in files_dir: 20 glob_files(path+"/"+i,n) 21 n+=1 22 np.savez(outfile,x=x,y=y) 23 print("保存しました"+outfile,len(x)) 24 25 26def glob_files(path,label): 27 files=glob.glob(path+"/*.png") 28 random.shuffle(files) 29 num=0 30 for f in files: 31 if num >=max_photo:break 32 num+=1 33 img=cv2.imread(f) 34 img=cv2.resize(img,(photo_size_t,photo_size_y)) 35 img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) 36 img=np.asarray(img) 37 x.append(img) 38 y.append(label) 39 print(num) 40 print(files) 41 42if __name__=="__main__": 43 main()

python

1コード 2#training.py 3import cnn_model 4import keras 5import matplotlib.pyplot as plt 6import numpy as np 7from sklearn.model_selection import train_test_split 8import main 9im_rows=400 10im_cols=400 11im_color=3 12in_shape=(im_rows,im_cols,im_color) 13nb_classes=3 14photos=np.load("image_2/deepl_"+main.folda+".npz") 15x=photos["x"] 16y=photos["y"] 17x=x.reshape(-1,im_rows,im_cols,im_color) 18x=x.astype("float32")/255 19 20y=keras.utils.np_utils.to_categorical(y.astype("int32",nb_classes)) 21 22x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.8,random_state=0) 23 24model=cnn_model.get_model(in_shape,nb_classes) 25 26hist=model.fit(x_train,y_train,batch_size=10,epochs=50,verbose=1,validation_split=0.1,validation_data=(x_test,y_test)) 27score=model.evaluate(x_test,y_test,verbose=1) 28print("正解率=",score[1],"loss=",score[0]) 29print(hist) 30plt.plot(hist.history["accuracy"]) 31plt.plot(hist.history["val_accuracy"]) 32plt.title("Accuracy") 33plt.legend(["train","test"],loc="upper left") 34plt.savefig("accc_valacc.png") 35plt.show() 36plt.plot(hist.history["loss"]) 37plt.plot(hist.history["val_loss"]) 38plt.title("Loss") 39plt.legend(["train","test"],loc="upper left") 40plt.savefig('loss-valloss.png') 41 42modelname="./image_2/deepl_"+main.folda+".hdf5" 43model.save_weights(modelname)

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

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

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

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

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

guest

回答1

0

自己解決

npzファイルをtrainとtestそれぞれで作成し、training.pyで読み込む際にそれぞれのnpzファイルを指定することで解決しました。

投稿2019/12/26 09:37

nomonomo

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問