AIのモデルの精度
Q&A
Closed
モデルの精度を上げたい
pythonで画像を判定するプログラムを作っているんですけど、あまり良い精度が出ません。
epochsだのvalidation_stepsだのありますが、どの回数を上げる/下げればいいのでしょう
Windows Terminal内のコマンドプロンプトでの結果
Epoch 1/100
10/10 [==============================] - 2s 163ms/step - loss: 0.7666 - accuracy: 0.5100 - val_loss: 0.6794 - val_accuracy: 0.5400
Epoch 2/100
10/10 [==============================] - 1s 97ms/step - loss: 0.6429 - accuracy: 0.5900 - val_loss: 0.5977 - val_accuracy: 0.6600
Epoch 3/100
10/10 [==============================] - 1s 106ms/step - loss: 0.5978 - accuracy: 0.6289 - val_loss: 0.5948 - val_accuracy: 0.7800
中略
Epoch 70/100
10/10 [==============================] - 1s 130ms/step - loss: 0.0772 - accuracy: 0.9700 - val_loss: 0.8683 - val_accuracy: 0.8000
中略
Epoch 95/100
10/10 [==============================] - 1s 125ms/step - loss: 0.0708 - accuracy: 0.9600 - val_loss: 0.8159 - val_accuracy: 0.8200
Epoch 96/100
10/10 [==============================] - 1s 125ms/step - loss: 0.0186 - accuracy: 1.0000 - val_loss: 1.7726 - val_accuracy: 0.6800
Epoch 97/100
10/10 [==============================] - 1s 120ms/step - loss: 0.0107 - accuracy: 1.0000 - val_loss: 1.1480 - val_accuracy: 0.7800
Epoch 98/100
10/10 [==============================] - 1s 101ms/step - loss: 0.0084 - accuracy: 1.0000 - val_loss: 1.0915 - val_accuracy: 0.7800
Epoch 99/100
10/10 [==============================] - 1s 110ms/step - loss: 0.0302 - accuracy: 0.9897 - val_loss: 1.3684 - val_accuracy: 0.7200
Epoch 100/100
10/10 [==============================] - 1s 105ms/step - loss: 0.0354 - accuracy: 0.9800 - val_loss: 1.4646 - val_accuracy: 0.7200
該当するソースコード
モデルのトレーニング
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras.layers import Conv2D, MaxPooling2D, Flatten
from keras.preprocessing.image import ImageDataGenerator
def main():
model = Sequential()
model.add(Conv2D(64, (3, 3), input_shape=(64, 64, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation("relu"))
model.add(Dense(2))
model.add(Activation("softmax"))
# model.summary()
model.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"])
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
"data/train",
target_size=(64, 64),
batch_size=10)
validation_generator = test_datagen.flow_from_directory(
"data/validation",
target_size=(64, 64),
batch_size=10)
model.fit_generator(
train_generator,
epochs=100,
steps_per_epoch=10,
validation_data=validation_generator,
validation_steps=5)
model.save("model.h5")
if __name__ == '__main__':
main()
判定機の方も
import sys
from PIL import Image
from keras.models import load_model
import numpy as np
def main():
name = sys.argv[1]
# print(name)
image = Image.open(name)
image = image.resize((64, 64))
image.show()
model = load_model("model.h5")
np_image = np.array(image)
np_image = np_image / 255
np_image = np_image[np.newaxis, :, :, :]
result = model.predict(np_image)
# print(result)
if result[0][0] > result[0][1]:
print("しいたけ", end=" ")
print(result[0][0]*100, end="%")
else:
print("ツキヨタケ", end=" ")
print(result[0][1]*100, end="%")
if __name__ == '__main__':
main()
自分で試したこと
epochsを30から100に
validation_stepsを10から5に
参考にした動画は90%の精度でした
画像は学習用が847枚で途中経過用?が104枚です。
関係ないけど記号は全角の方がいいですか?
0 likes