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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Keras

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

625閲覧

学習用データセットの画像数とnpyファイルに保存されたデータの数が合わない

ryo_fk

総合スコア0

Keras

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/23 13:13

前提

pythonを用いてイモリの胚を良好、不良に分ける二値分類を行っています。
良好胚の学習用データファイルには画像が166枚、不良胚の学習用のデータファイルには画像が123枚。
合計289枚あります。

ターミナルで実行すると、学習した枚数が125枚と表示される。(テスト用データを20枚枚に設定)

実現したいこと

289枚全て用いたい。
(素人質問で恐縮です。)

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

Epoch 28/30 125/125 [==============================] - 5s 39ms/step - loss: 0.0474 - accuracy: 0.9882 Epoch 29/30 125/125 [==============================] - 5s 39ms/step - loss: 0.0319 - accuracy: 0.9915 Epoch 30/30 125/125 [==============================] - 5s 38ms/step - loss: 0.0612 - accuracy: 0.9834 1/1 [==============================] - 0s 80ms/step 判別した画像 >>> ./bad_judge/IMG_0813.jpeg 判別精度[[良好,不良]] >>> [[0.35066244 0.7052223 ]] 判別結果 >>> 不良胚

該当のソースコード

python

1import cv2 2import sys 3from PIL import Image 4import os 5import tensorflow as tf 6import datetime 7import random 8import glob 9import numpy as np 10import h5py 11from PIL import ImageFile 12import keras 13from keras.models import Sequential 14from keras.layers import Convolution2D, MaxPooling2D 15from keras.layers import Activation, Dropout, Flatten, Dense 16from keras.optimizers import RMSprop 17from keras.utils import np_utils 18from keras.models import load_model 19from keras.callbacks import EarlyStopping 20from tensorflow.keras.utils import plot_model, to_categorical 21from tensorflow.keras import datasets, layers, models 22 23#画像の読み込み 24 25datadir='./' 26 27# indexを教師ラベルとして割り当て(0にはgod、1にはbad) 28classes = ["god", "bad"] 29num_classes = len(classes) 30image_size = 64 31num_testdata = 20 32 33X_train = [] 34X_test = [] 35y_train = [] 36y_test = [] 37 38for index, classlabel in enumerate(classes): 39 40 #学習用ファイルのインポート 41 photos_dir = os.path.join(datadir, f"{classlabel}_learn") 42 files = glob.glob(os.path.join(photos_dir, "*.jpg")) 43 44 for i, file in enumerate(files): 45 image = Image.open(file) 46 image = image.convert("RGB") 47 image = image.resize((image_size, image_size)) 48 data = np.asarray(image) 49 50 if i < num_testdata: 51 X_test.append(data) 52 y_test.append(index) 53 else: 54 55 for angle in range(-20, 20, 5): 56 57 img_r = image.rotate(angle) 58 data = np.asarray(img_r) 59 X_train.append(data) 60 y_train.append(index) 61 # FLIP_LEFT_RIGHT は 左右反転 62 img_trains = img_r.transpose(Image.FLIP_LEFT_RIGHT) 63 data = np.asarray(img_trains) 64 X_train.append(data) 65 y_train.append(index) 66 67X_train = np.asanyarray(X_train) 68X_test = np.asanyarray(X_test) 69y_train = np.asanyarray(y_train) 70y_test = np.asanyarray(y_test) 71 72xy = (X_train, X_test, y_train, y_test) 73np.save('./imori.npy', xy) 74classes = ["god", "bad"] 75num_classes = len(classes) 76image_size = 64 77 78#データを読み込む 79def load_data(): 80 X_train, X_test, y_train, y_test = np.load('./imori.npy', allow_pickle=True) 81 X_train = X_train.astype("float") / 255 82 X_test = X_test.astype("float") / 255 83 y_train = np_utils.to_categorical(y_train, num_classes) 84 y_test = np_utils.to_categorical(y_test, num_classes) 85 86 return X_train, y_train, X_test, y_test 87 88#モデルの学習 89def train(X, y, X_test, y_test): 90 model = Sequential() 91 92 #conv2D(64,(3,3)) →3✖️3のフィルタを64枚使う 93 model.add(Convolution2D(64,3, 3, padding='same',input_shape=X.shape[1:])) 94 model.add(Activation('relu')) 95 model.add(Convolution2D(64,(3, 3))) 96 model.add(Activation('relu')) 97 model.add(MaxPooling2D(pool_size=(2,2))) 98 model.add(Dropout(0.1)) 99 100 model.add(Convolution2D(128,3, 3, padding='same')) 101 model.add(Activation('relu')) 102 model.add(Convolution2D(128,(3, 3))) 103 model.add(Activation('relu')) 104 model.add(MaxPooling2D(pool_size=(2,2))) 105 model.add(Dropout(0.1)) 106 107 model.add(Flatten()) 108 model.add(Dense(256)) 109 model.add(Activation('relu')) 110 model.add(Dropout(0.5)) 111 model.add(Dense(2)) # 識別のため、2クラス分類のため2を指定 112 model.add(Activation('sigmoid')) 113 114 115 # HDF5ファイルにKerasのモデルを保存 116 #ls:学習率(一度にどのくらいパラメータを変化させるか) decay:各更新の学習減衰率 117 adam = RMSprop(lr=0.001, decay=1e-6) 118 model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy']) 119 #学習回数を設定 120 model.fit(X, y, batch_size=32, epochs=30) 121 122 # HDF5ファイルにKerasのモデルを保存 123 model.save('./cnn.h5') 124 125 126 127 return model 128 129def main(): 130 131#読み込み 132 X_train, y_train, X_test, y_test = load_data() 133# モデルの学習 134 model = train(X_train, y_train, X_test, y_test) 135main() 136 137#推論 138cnn = "./cnn.h5" 139 140#判別したい画像のインポート 141#pic = "./god_judge/IMG_0810.jpeg" 142pic = "./bad_judge/IMG_0813.jpeg" 143 144imsize = (64, 64) 145 146def load_image(path): 147 img = Image.open(path) 148 img = img.convert('RGB') 149 img = img.resize(imsize) 150 img = np.asarray(img) 151 img = img / 255.0 152 return img 153 154model = load_model(cnn) 155img = load_image(pic) 156 157prd = model.predict(np.array([img])) 158prelabel = np.argmax(prd, axis=1) 159print("判別した画像 >>>", pic) 160print("判別精度[[良好,不良]] >>>", prd) 161 162if prelabel == 0: 163 print("判別結果 >>> 良好胚") 164elif prelabel == 1: 165 print("判別結果 >>> 不良胚") 166 167#学習率0.001,epoch30,laern125で3分15秒

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

Macを使用しターミナルで実行。vscでコードを記載

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

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

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

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

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

meg_

2023/01/23 15:54

画像ファイルの拡張子は全て「jpg」ですか?
guest

回答1

0

学習過程における標準出力のn/125はステップ数(a.k.a. 逆伝搬して重みを更新した回数)です.画像枚数ではありません

質問のコードのうちmodel.fit()において,batch_size = 32としていることから,1ステップにつき32枚の画像が使われます.

さらに,用意したX_trainはオフラインDAの結果,合計3984枚あるはずです.len(X_train)等で確認してみてください.

ここで,len(X_train) / batch_size = 3984 / 32 = 124.5であることから,124ステップはbatch_size = 32で学習し,残りの1ステップはbatch_size = 16で学習することで,用意したすべてのX_trainを利用することになっています.

投稿2023/01/23 18:31

PondVillege

総合スコア1579

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

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

jbpb0

2023/01/24 12:06

> 合計3984枚あるはず > 良好胚の学習用データファイルには画像が166枚、不良胚の学習用のデータファイルには画像が123枚。 のそれぞれから > テスト用データを20枚 を除いた残りが、 (166 - 20) + (123 - 20) = 249枚 それを、 「for angle in range(-20, 20, 5):」 のループで水増ししてて、「angle」が-20, -15...10, 15の8種類で、それらを全て左右反転もさせるので2倍になるので、水増し後に学習用画像は 249 * 8 * 2 = 3984枚 ですかね
PondVillege

2023/01/24 13:29

そうですね,質問者がその状態を把握できてないと上の質問が出てくるのかもしれないですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問