0

私は CNN を作成しました。それに対してランダムな画像をテストする方法を見つけようとしています。Keras と Tensorflow を利用しています。ここにある画像をテストしたいとしましょう: https://i.ytimg.com/vi/7I8OeQs7cQA/maxresdefault.jpg

モデルを保存してロードし、それに対してこの画像をテストするにはどうすればよいですか? オンラインで見つけたコードの例を次に示し ます。

どんな助けでも大歓迎です、ありがとう!

ここに画像の説明を入力

import os
import cv2
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import display, Image

from keras.models import Sequential, load_model
from keras.layers import Conv2D, Flatten, MaxPooling2D, Input
from keras.preprocessing.image import ImageDataGenerator

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import models, layers

X = []
y = []

from sklearn.model_selection import train_test_split

labels = os.listdir(r'C:/Users/zF1bo/Desktop/natural_images')
labels



for label in labels:
    path = r'C:/Users/zF1bo/Desktop/natural_images/{}/'.format(label)
    img_data = os.listdir(path)
    
    for image in img_data:
        a = cv2.imread( path + image)
        a = cv2.resize(a, (64, 64))
        X.append(np.array(a.astype('float32')) / 255)
        y.append(label)


buckets = []
for i in y:
    if i == 'airplane':
        buckets.append(0)
    elif i == 'car':
        buckets.append(1)
    elif i == 'cat':
        buckets.append(2)
    elif i == 'dog':
        buckets.append(3)
    elif i == 'flower':
        buckets.append(4)
    elif i == 'fruit':
        buckets.append(5)
    elif i == 'motorbike':
        buckets.append(6)
    elif i == 'person':
        buckets.append(7)


y = buckets

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, \
        random_state = 0)


model = models.Sequential()
model.add(layers.Conv2D(filters=32, kernel_size=(5,5), activation='relu', input_shape=(64,64,3)))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(8, activation='softmax'))

model.compile(optimizer='adam', loss = 'sparse_categorical_crossentropy',metrics=['accuracy'])

y_train = np.array(y_train)

model.fit(X_train, y_train, batch_size=(256), epochs=25)

pred = model.predict(X_test)

diff = []
for i in pred:
    diff.append(np.argmax(i))

from sklearn.metrics import accuracy_score

accuracy_score(diff,y_test)
4

2 に答える 2

0

mode.save('path to save location') を使用してモデルを保存できます。読み取る必要がある画像を入力するには、トレーニング画像に対して行った前処理を実行してから、以下のコードに示すように model.predict を使用します。

import tensorflow as tf
from tensorflow import keras
model = keras.models.load_model('path/to/location') # loads the saved model
pred_img =r'path to the img'
img=cv2.imread (pred_img)
img=img/255 # rescale the image
print(img.shape)
img=cv2.resize(img, (64,64)) # resize to same size used in training
print (img.shape)
img=np.expand_dims(img, axis=0)
print (img.shape)
pred=model.predict(img)
print (pred)  # will be a list of 8 elements select the element in the list with the highest probability
index=np.argmax(pred)) # this will be the index of the class predicted
class_name=buckets[index] # this will be the name of the class predicted
print (class_name)

cv2 を使用してトレーニング画像を読み込む場合は、順序が rgb ではなく bgr であることを覚えておいてください。モデルは bgr 画像でトレーニングされました。予測するために画像を読み込むと、それも bgr でなければなりません。

于 2020-10-12T05:37:46.783 に答える