CNN avec keras, essayez avec l'image que vous avez choisie Les bases ont été créées en se référant à cet article.
C'est juste une différence subtile.
J'ai moi-même enquêté sur les détails et j'ai réussi à le faire. Je n'ai pas assez étudié parce que je suis Yoshi parce que j'ai beaucoup bougé.
Le but est de juger OK ou NG à partir d'une image d'une certaine chose. Les données d'image (640x480) sont utilisées comme données d'origine. J'utilise 1000 feuilles pour OK et NG.
Le but est de garder une note des résultats atteints par les débutants.
Windows10 64bit Anaconda navigator Jupiter notebook Python 3.7.7 tensorflow 2.1.0 tensorflow-gpu 2.1.0 keras 2.3.1 numpy 1.18.1 matplotlib 3.1.3
Construisez un programme dans l'environnement ci-dessus
cnn.ipynb
import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.convolutional import MaxPooling2D
from keras.layers import Activation, Conv2D, Flatten, Dense,Dropout
from sklearn.model_selection import train_test_split
from keras.optimizers import SGD, Adadelta, Adagrad, Adam, Adamax, RMSprop, Nadam
from PIL import Image
import numpy as np
import glob
import matplotlib.pyplot as plt
import time
import os
Je n'avais besoin que de ʻAdadelta pour
de l'importation de keras.optimizers`
Je veux essayer diverses choses et les intégrer. (Je ne l'ai pas testé après tout ...)
cnn.ipynb
#Réglage
batch_size = 16
epochs = 200
#Répertoire d'images
test_dir ="Spécifiez le répertoire dans lequel les images sont enregistrées"
folder = os.listdir(test_dir)
#Réglage de la taille lors du redimensionnement de l'image originale 640x480
x_image_size = 200#640→200
y_image_size = 200#480→200
dense_size = len(folder)
Quant à batch_size
, les valeurs de paramétrage telles que 1, 4, 32, etc. roulaient pour voir divers sites.
Au début, j'ai essayé de le tourner à 32, mais j'ai eu une erreur et cela n'a pas fonctionné, alors je l'ai réglé sur 16.
Je ne peux pas dire que c'est correct parce que je n'ai pas enquêté sur tous les détails ...
Je viens de me retourner, alors je l'utilise.
Je l'ai réglé séparément pour essayer différentes tailles d'image verticalement et horizontalement. En conséquence, j'ai dû le laisser tomber à 200 ou il était trop lourd à déplacer. Donc ʻimage_size = 200` est très bien. (La dernière description doit être partiellement modifiée)
cnn.ipynb
X = []
Y = []
for index, name in enumerate(folder):
dir = test_dir + name
files = glob.glob(dir + "/*.jpg ")
for i, file in enumerate(files):
image = Image.open(file)
image = image.convert("RGB")
image = image.resize((x_image_size, y_image_size))
data = np.asarray(image)
X.append(data)
Y.append(index)
X = np.array(X)
Y = np.array(Y)
X = X.astype('float32')
X = X / 255.0
Y = np_utils.to_categorical(Y, dense_size)
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.15)
Cette fois, le test a été fixé à 15%, ce qui est presque le même que l'article auquel j'ai fait référence.
cnn.ipynb
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(dense_size))
model.add(Activation('softmax'))
model.summary()
Pour être honnête, j'étudie Où et comment le touchez-vous pour le changer? Je ne sais pas. site officiel de Keras Je regarde ici, mais les amateurs ne peuvent pas comprendre ...
cnn.ipynb
optimizers ="Adadelta"
results = {}
model.compile(loss='categorical_crossentropy', optimizer=optimizers, metrics=['accuracy'])
results[0]= model.fit(X_train, y_train, validation_split=0.2, epochs=epochs,batch_size=batch_size)
model_json_str = model.to_json()
open('model.json', 'w').write(model_json_str)
model.save('weights.h5');
Pour être honnête, je ne pourrais même pas l'atteindre sans Qiita. Merci beaucoup.
Résultat d'apprentissage
résultats de test
Au début, le résultat était terrible et le résultat d'apprentissage est devenu une barre horizontale. À ce moment-là, les données d'image sont aussi petites qu'environ 50 chacune. Le nombre d'époques était également d'environ 20.
Quelqu'un m'a dit que "les images sont la vie", et je pense que c'était exactement le résultat.
Après cela, je suis ravi de faire une inférence basée sur ces données et d'obtenir le résultat correctement.
Pour une raison quelconque, j'ai pu le créer sous forme de données. Je me suis rendu compte que la partie «essayer diverses choses» faisait cruellement défaut. J'ai pu savoir à nouveau que je ne me souviens pas ou essayer de savoir à moins de bouger ma main.
Si vous commencez avant l'âge de 40 ans, ce sera difficile car votre cerveau refusera.
c'est tout.
Recommended Posts