CNN mit Keras, versuchen Sie es mit dem Bild, das Sie aufgenommen haben Die Grundlagen wurden unter Bezugnahme auf diesen Artikel erstellt.
Es ist nur ein subtiler Unterschied.
Ich habe die Details selbst untersucht und es geschafft. Ich habe nicht genug gelernt, weil ich Yoshi bin, weil ich viel umgezogen bin.
Der Zweck besteht darin, OK oder NG anhand eines Bildes einer bestimmten Sache zu beurteilen. Bilddaten (640 x 480) werden als Originaldaten verwendet. Ich benutze 1000 Blatt für OK und NG.
Der Zweck ist es, ein Memo über die Ergebnisse zu führen, die Anfänger erreicht haben.
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
Erstellen Sie ein Programm in der oben genannten Umgebung
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
Nur "Adadelta" war gut für "aus keras.optimizers import" Ich möchte verschiedene Dinge ausprobieren und hineinstecken. (Ich habe es doch nicht getestet ...)
cnn.ipynb
#Aufbau
batch_size = 16
epochs = 200
#Bildverzeichnis
test_dir ="Geben Sie das Verzeichnis an, in dem Bilder gespeichert werden"
folder = os.listdir(test_dir)
#Größeneinstellung beim Ändern der Größe des Originalbilds 640 x 480
x_image_size = 200#640→200
y_image_size = 200#480→200
dense_size = len(folder)
Bei "batch_size" wurden die Einstellungswerte wie 1, 4, 32 usw. gerollt, um verschiedene Sites anzuzeigen. Zuerst habe ich versucht, es auf 32 zu drehen, aber ich habe einen Fehler erhalten und es hat nicht funktioniert, also habe ich es auf 16 gesetzt. Ich kann nicht sagen, dass es richtig ist, weil ich nicht alle Details untersucht habe ... Ich habe mich gerade umgedreht, also benutze ich es.
Ich habe es separat eingestellt, um verschiedene Bildgrößen vertikal und horizontal auszuprobieren. Infolgedessen musste ich es auf 200 fallen lassen oder es war zu schwer, um sich zu bewegen. "Image_size = 200" ist also in Ordnung. (Die spätere Beschreibung muss teilweise geändert werden)
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)
Diesmal wurde der Test auf 15% eingestellt, was fast dem Artikel entspricht, auf den ich mich bezog.
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()
Um ehrlich zu sein, lerne ich Wo und wie berührst du es, um es zu ändern? Ich weiß es nicht. offizielle Website von Keras Ich schaue hier, aber Amateure können nicht verstehen ...
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');
Um ehrlich zu sein, ich könnte es nicht einmal ohne Qiita erreichen. Vielen Dank.
Lernergebnis
Testergebnisse
Zuerst war das Ergebnis schrecklich und das Lernergebnis wurde zu einem horizontalen Balken. Zu diesem Zeitpunkt sind die Bilddaten jeweils nur etwa 50. Die Anzahl der Epochen betrug ebenfalls etwa 20.
Jemand sagte mir, dass "Bilder Leben sind", und ich denke, das war genau das Ergebnis.
Danach bin ich begeistert, anhand dieser Daten eine Schlussfolgerung zu ziehen und das Ergebnis richtig zu erhalten.
Aus irgendeinem Grund konnte ich es als Daten erstellen. Mir wurde klar, dass der Teil "verschiedene Dinge ausprobieren" überwiegend fehlt. Ich konnte wieder wissen, dass ich mich nicht erinnern oder versuchen kann zu wissen, wenn ich nicht meine Hand bewege.
Wenn Sie vor dem 40. Lebensjahr beginnen, wird es schwierig, weil Ihr Gehirn sich weigert.
das ist alles.
Recommended Posts