[PYTHON] Datenversorgungstricks mit deque beim maschinellen Lernen

Beim Umgang mit einer großen Anzahl von Bilddateien in einer maschinellen Lernaufgabe ist es üblich, die Dateinamen aufzulisten und die Bilder während des Trainingsprozesses nacheinander zu lesen. Aufgrund der Beziehung zwischen der Anzahl der vorbereiteten Proben und der Mini-Batch-Größe im Lernprozess werden in der zweiten Hälfte des Lernens unvermeidlich Brüche erzeugt, und die Handhabung ist tendenziell kompliziert.

Zum Beispiel, wenn die Anzahl der Datenproben num = 100 und die Mini-Batch-Größe batch_size = 30 ist

  1. Führen Sie den Mini-Batch dreimal aus und verwenden Sie keine 10 Proben.
  2. Passen Sie die Größe im nächsten Mini-Batch an (batch_size = 10).
  3. Wenn in der nächsten Mini-Batch-Größe die Anzahl der Proben (20) nicht ausreicht, wird die einmal verwendete Probe wiederverwendet.

Die Methode von ist denkbar. Wenn die Anzahl der Proben groß ist, ist die obige Option 1 in Ordnung. Wenn Sie die Trainingsdaten jedoch sorgfältig verwenden möchten, sollten Sie die Optionen 2 und 3 auswählen.

Hier werden wir die Methode von Option 3 mit deque implementieren.

Was ist deque

Die Erklärung wird aus dem einleitenden Python3 zitiert.

deque (ausgesprochenes Deck) ist an beiden Enden ein Cue und hat die Funktionen von Stack und Cue. Dies ist nützlich, wenn Sie Elemente an beiden Enden der Sequenz hinzufügen oder entfernen möchten.

Diese Erklärung ist unten dargestellt.

deque_image.png

Dieses Mal wurde die Funktion von deque.rotate () für die "Wiederverwendung der Datenprobe" verwendet. (Der Vorgang "Drehen, wenn Daten verwendet werden, Drehen, wenn Daten verwendet werden, ..." wird ausgeführt.)

Implementierung

Stellen Sie sich den Fall vor, in dem die Datendatei wie folgt erweitert wird.

$ ls deque_ex/*.jpg
deque_ex/img_0.jpg  deque_ex/img_3.jpg  deque_ex/img_6.jpg  deque_ex/img_9.jpg
deque_ex/img_1.jpg  deque_ex/img_4.jpg  deque_ex/img_7.jpg
deque_ex/img_2.jpg  deque_ex/img_5.jpg  deque_ex/img_8.jpg

Erstellen Sie zunächst eine Liste (Deck) der zu behandelnden Dateinamen.

import glob
from collections import deque
import numpy as np

def mk_list():
    fname_list = glob.glob('*.jpg')
    sorted_fn = sorted(fname_list)
    deq_fname = deque()
    deq_fname.extend(sorted_fn)   # 'extend' is right, 
                                  # 'append' is not good.
    
    return deq_fname

Der Punkt ist, deque.extend () anstelle von deque.append () zu verwenden, wenn Sie dem Deck eine Liste hinzufügen.

>>>
deque(['img_0.jpg',
       'img_1.jpg',
       'img_2.jpg',
       'img_3.jpg',
       'img_4.jpg',
       'img_5.jpg',
       'img_6.jpg',
       'img_7.jpg',
       'img_8.jpg',
       'img_9.jpg'])

Die Funktion, die Daten aus der Datenliste (um genau zu sein die Deque-Klasse) und die Anzahl der Anforderungen zurückgibt, lautet wie folgt. (Verwenden Sie List Slices und deque.rotate ().)

def feed_fn_ver0(dq, num):
    feed = list(dq)[-num:]
    dq.rotate(num)
    
    return feed

Die Situation, in der 3 Datenproben 5 Mal damit entnommen wurden, ist wie folgt.

0: ['img_7.jpg', 'img_8.jpg', 'img_9.jpg']
1: ['img_4.jpg', 'img_5.jpg', 'img_6.jpg']
2: ['img_1.jpg', 'img_2.jpg', 'img_3.jpg']
3: ['img_8.jpg', 'img_9.jpg', 'img_0.jpg']
4: ['img_5.jpg', 'img_6.jpg', 'img_7.jpg']

Wir konnten 3 Proben vom Ende des Datendecks abrufen. Es ist kein Problem, es in einem maschinellen Lernprozess zu verwenden, der sich nicht um die Reihenfolge kümmert, aber da "von Ende" etwas unangenehm ist, habe ich es auf "von Anfang an" korrigiert und als nächstes die erforderliche Datenlänge überprüft. Code.

def feed_fn_ver1(dq, num):
    '''
      dq  : data source (deque)
      num : request size (int)
    '''
    # check length
    assert num <= len(dq)
   
    feed = list(dq)[:num]
    dq.rotate(-num)

    return feed

my_list = mk_list()
for i in range(5):
    print(' Feed [', i, ']: ', feed_fn_ver1(my_list, 3))
    
>>>
 Feed [ 0 ]:  ['img_0.jpg', 'img_1.jpg', 'img_2.jpg']
 Feed [ 1 ]:  ['img_3.jpg', 'img_4.jpg', 'img_5.jpg']
 Feed [ 2 ]:  ['img_6.jpg', 'img_7.jpg', 'img_8.jpg']
 Feed [ 3 ]:  ['img_9.jpg', 'img_0.jpg', 'img_1.jpg']
 Feed [ 4 ]:  ['img_2.jpg', 'img_3.jpg', 'img_4.jpg']

Es hat gut funktioniert. Die zufällig gemischten Daten sind wie folgt.

def mk_list_shuffle():
    fname_list = glob.glob('*.jpg')
    np_list_fn = np.array(fname_list)
    np.random.shuffle(np_list_fn)
    deq_fname = deque()
    deq_fname.extend(list(np_list_fn))
    
    return deq_fname

my_list = mk_list_shuffle()
for i in range(5):
    print(' Feed [', i, ']: ', feed_fn_ver1(my_list, 3))

>>>
 Feed [ 0 ]:  ['img_9.jpg', 'img_7.jpg', 'img_6.jpg']
 Feed [ 1 ]:  ['img_1.jpg', 'img_8.jpg', 'img_3.jpg']
 Feed [ 2 ]:  ['img_4.jpg', 'img_0.jpg', 'img_2.jpg']
 Feed [ 3 ]:  ['img_5.jpg', 'img_9.jpg', 'img_7.jpg']
 Feed [ 4 ]:  ['img_6.jpg', 'img_1.jpg', 'img_8.jpg']

Es ist ein wenig schwer zu verstehen, aber wenn Sie blinzeln, können Sie sehen, dass die Daten durch ordnungsgemäße Zirkulation geliefert werden können. Mit dieser Funktion (feed_fn_ver1 ()) sollte der Trainingsprozess für maschinelles Lernen einfach sein.

(Der obige Code wurde in der Umgebung von Python 2.7.11 und Python 3.5.1 bestätigt.)

Referenzen (Website)

Recommended Posts

Datenversorgungstricks mit deque beim maschinellen Lernen
Maschinelles Lernen in Delemas (Datenerfassung)
Vorverarbeitung beim maschinellen Lernen 2 Datenerfassung
Vorverarbeitung beim maschinellen Lernen 4 Datenkonvertierung
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
Datensatz für maschinelles Lernen
Maschinelles Lernen in Delemas (Praxis)
Wird in EDA für maschinelles Lernen verwendet
Vorverarbeitung beim maschinellen Lernen 3 Fehlende Wert- / Ausreißer- / Ungleichgewichtsdaten
Automatisieren Sie Routineaufgaben beim maschinellen Lernen
Klassifikation und Regression beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
Random Seed Research im maschinellen Lernen
Grundlegendes maschinelles Lernverfahren: ② Daten vorbereiten
Anwendungsentwicklung mit Azure Machine Learning
Sammeln von Daten zum maschinellen Lernen
[Tutorial] Erstellen Sie mithilfe von maschinellem Lernen in 30 Minuten einen einzigartigen Ausdrucksextraktor
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
Unausgeglichenes Datenlernen mit maschinellem Lernen k-NN
[Python] Techniken, die häufig beim maschinellen Lernen verwendet werden
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Maschinelles Lernen
Ich habe versucht, Gitarrenakkorde in Echtzeit mithilfe von maschinellem Lernen zu klassifizieren
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
Aktienkursprognose mit maschinellem Lernen (Return Edition)
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
SELECT-Daten mithilfe der Client-Bibliothek mit BigQuery
[Maschinelles Lernen] Regressionsanalyse mit Scicit Learn
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (1: Erfassen von Kandidatenbildern mithilfe des Web-API-Dienstes)
Ein Memorandum über Methoden, die häufig beim maschinellen Lernen mit Scikit-Learn (für Anfänger) verwendet werden.
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Vollständige Offenlegung der beim maschinellen Lernen verwendeten Methoden
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
[Python] Datenanalyse, maschinelles Lernen (Kaggle) -Datenvorverarbeitung-
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Maschinelles Lernen Aufteilung der Trainingsdaten und Lernen / Vorhersage / Verifizierung
Zusammenfassung der beim maschinellen Lernen verwendeten Bewertungsfunktionen
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Aktienkursprognose mit Deep Learning [Datenerfassung]
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Geschichte rund um die Datenanalyse durch maschinelles Lernen
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
[Maschinelles Lernen] Extrahieren Sie ähnliche Wörter mechanisch mit WordNet
Kausales Denken mit maschinellem Lernen (Organisation von Methoden des kausalen Denkens)
Aufteilen von Trainingsdaten für maschinelles Lernen in objektive Variablen und andere in Pandas
[Memo] Maschinelles Lernen
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
Was ich über KI / maschinelles Lernen mit Python gelernt habe (1)
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen