Dieses Mal werde ich versuchen, ein neuronales Netzwerk mit OpenCV3 und Python3 zu lernen. Der Fall, dass Bildverarbeitung und neuronales Netzwerk in Kombination verwendet werden, wird nur mit OpenCV abgeschlossen, sodass eine kleine Überprüfung sinnvoll ist. Außerdem sind die Python-Bindungen von OpenCV tatsächlich C ++, und Python ist nur ein Wrapper, der C ++ - Methoden aufruft, sodass das Lernen relativ schnell funktioniert.
■ Ausführungsumgebung · Python: 3.5.2 ・ OpenCV: 3.1
■ Klicken Sie hier für die Installation und einfache Verwendung Installieren Sie OpenCV 3 (Core + Contrib) in der Python 3-Umgebung und unterscheiden Sie zwischen OpenCV 2 und OpenCV 3 und überprüfen Sie die einfache Bedienung
Dies ist das Mindestprogramm. Eingabeebene: 9 Versteckte Ebene: 5 Ausgabeschicht: 9
Aktivierungsfunktion: Sigmoid Lernmethode: Rückenausbreitung Trainingsdaten: ·Eingabedaten [[1.2, 1.3, 1.9, 2.2, 2.3, 2.9, 3.0, 3.2, 3.3]] ·Ausgabedaten [[0, 0, 0, 0, 0, 1, 0, 0, 0]] Verifizierungsdaten: ·Eingabedaten [[1.4, 1.5, 1.2, 2.0, 2.5, 2.8, 3.0, 3.1, 3.8]]
ann.py
# -*- coding: utf-8 -*-
import cv2
import numpy as np
#Generieren Sie ein neuronales Netzwerk
ann = cv2.ml.ANN_MLP_create()
#Einstellungen für Eingabeebene, versteckte Ebene und Ausgabeebene
ann.setLayerSizes(np.array([9, 5, 9], dtype = np.uint8))
#Lernmethodeneinstellungen
ann.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
#Lernen
ann.train(np.array([[1.2, 1.3, 1.9, 2.2, 2.3, 2.9, 3.0, 3.2, 3.3]], dtype=np.float32),
cv2.ml.ROW_SAMPLE,
np.array([[0, 0, 0, 0, 0, 1, 0, 0, 0]], dtype=np.float32))
#Überprüfung
result = ann.predict(np.array([[1.4, 1.5, 1.2, 2.0, 2.5, 2.8, 3.0, 3.1, 3.8]], dtype = np.float32))
print(result)
Das Ausführungsergebnis ist wie folgt.
(5.0, array([[-0.06419383, -0.13360272, -0.1681568 , -0.18708915, 0.0970564 , 0.89237726, 0.05093023, 0.17537238, 0.13388439]], dtype=float32))
Die Ausgabe für die Eingabe [[1.4, 1.5, 1.2, 2.0, 2.5, 2.8, 3.0, 3.1, 3.8]] ist [[-0.06419383, -0.13360272, -0.1681568, -0.18708915, 0.0970564, 0.89237726, 0.05093023, 0.17537238, 0.13388439]] Es war. Da die zu trainierende Ausgabe [[0, 0, 0, 0, 0, 1, 0, 0, 0]] ist, weist die Eingabe zum Zeitpunkt der Überprüfung einige Schwankungen in Bezug auf die Eingabe zum Zeitpunkt des Lernens auf. Das Überprüfungsergebnis liegt im Bereich von -0,1 bis +0,1, was fast der beabsichtigten Ausgabe entspricht.
Die Standardaktivierungsfunktion ist die Sigmoidfunktion.
setActivationFunction(type, param1, param2)
Geben Sie mit an.
Spezifikationsbeispiel:
activate_function.py
ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM, 0, 0)
Streit | Bedeutung | Standard |
---|---|---|
type | Aktivierungsfunktion | Sigmaid-Funktion |
param1 | α | 0 |
param2 | β | 0 |
Methode | Wert | Konstante | Formel |
---|---|---|---|
Gleiche Funktion | 0 | cv2.ml.ANN_MLP_IDENTITY | |
Sigmaid-Funktion | 1 | cv2.ml.ANN_MLP_SIGMOID_SYM | |
Gaußsche Funktion | 2 | cv2.ml.ANN_MLP_GAUSSIAN |
Die Standardeinstellungen für die Endbedingung sind sowohl die maximale Anzahl von Wiederholungen: 1000 als auch der minimale Änderungsbetrag: 0,01.
setTermCriteria(val)
Geben Sie mit an.
Spezifikationsbeispiel:
criteria.py
criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 0.01)
ann.setTermCriteria(criteria)
Kriterien legt die Werte in der Reihenfolge (Typ, maxCount, epsilon) fest.
· Art
Konstante | Bedeutung | Wert |
---|---|---|
cv2.TERM_CRITERIA_COUNT | Maximale Anzahl von Wiederholungen | 1 |
cv2.TERM_CRITERIA_MAX_ITER | Maximale Anzahl von Wiederholungen | 1 |
cv2.TERM_CRITERIA_EPS | Minimale Änderung | 2 |
Spezifikationsbeispiel:
```momentum_scale.py
ann.setBackpropMomentumScale(0.1)
```
Spezifikationsbeispiel:
```weight_scale.py
ann.setBackpropWeightScale(0.1)
```
Klicken Sie hier, um Einzelheiten zur Angabe zu erfahren (Link).
Einführung von ** Bag Of Visual Words (BOW) ** in "Lernen, Hunde und Katzen mit OpenCV 3 zu klassifizieren" Es ist jedoch bekannt, wie mit BOW ein neuronaler Netzwerkeingang erstellt wird. Ich möchte diesen Bereich zu einem späteren Zeitpunkt noch einmal vorstellen.
Recommended Posts