[PYTHON] Erstellen Sie eine KI, die Zuckerbergs Gesicht mit Deep Learning identifiziert (KI-Modellbau)

Dies ist eine Fortsetzung des vorherigen Artikels "Erstellen einer KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert ① (Vorbereitung von Lerndaten)". Dieser Artikel ist Teil 2.

Was wir machen, ist "KI, die Zuckerbergs Gesicht identifiziert". Verwenden Sie TensorFlow aus der Deep Learning-Bibliothek von Google. Beispielvideos von dem, was ich dieses Mal gemacht habe, sind hier.

zuck4.png zgif2.gif

Vorheriger Artikel hat Gesichtsbilddaten gesammelt, die von TensorFlow trainiert werden sollen. Deshalb werden wir dieses Mal ein KI-Modell für TensorFlow erstellen! Die Arbeit des TensorFlow-Teils ist rau

** "(1) Design des TensorFlow-Lernmodells-> (2) Lernen und Trainieren von Gesichtsdaten-> (3) Ermöglichen Sie die Beurteilung des Gesichts eines Bildes anhand der Lernergebnisse" **

Ich werde mit dem Fluss fortfahren. Dieses Mal werde ich das Verfahren von ** "Entwerfen eines Lernmodells von TensorFlow (Entwerfen eines neuronalen Netzwerks)" ** beschreiben.

Da wir dann beim letzten Mal Gesichtsbilddaten zum Lernen gesammelt haben, ist das Design des Lernmodells wie folgt!

② Entwerfen Sie ein Lernmodell für TensorFlow

1. Vor der Verwendung von TensorFlow

Wenn Sie nicht über die erforderlichen Kenntnisse verfügen, um mit TensorFlow tatsächlich tief zu lernen, ist das Folgende bedeutungslos. Daher werde ich diejenigen vorstellen, die besonders hilfreich und einprägsam sind, wenn ich Anfänger bin.

[Deep Learning bezogen]

Neuronales Netzwerk und tiefes Lernen Es war eine großartige Lernerfahrung für mich, detailliert zu erklären, was hinter den Kulissen auf der Ebene der mathematischen Formeln passiert. Ich denke, Sie sollten es lesen, nachdem Sie den Punkt erreicht haben, an dem "ich irgendwie etwas über tiefes Lernen verstanden habe, aber ich verstehe es nicht." Es ist jedoch zu detailliert und ich verstehe nur etwa 10%. ② [Übersteigt künstliche Intelligenz den Menschen (Buch)](https://www.amazon.co.jp/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD % E3% 81% AF% E4% BA% BA% E9% 96% 93% E3% 82% 92% E8% B6% 85% E3% 81% 88% E3% 82% 8B% E3% 81% 8B-% E8% A7% 92% E5% B7% 9D% EF% BC% A5% EF% BC% B0% EF% BC% B5% EF% BC% A2% E9% 81% B8% E6% 9B% B8-% E6 % 9D% BE% E5% B0% BE-% E8% B1% 8A-ebook / dp / B00UAAK07S) Ein Buch von Herrn Matsuo von der Universität Tokio, das lautet: "Diese Person spricht von tiefem Lernen!" In Japan (??). Ich habe es vor ungefähr zwei Jahren gelesen und es war auf dem Kindle, also habe ich es noch einmal gelesen. Es ist sehr leicht zu verstehen, weil es erklärt: "Was ist tiefes Lernen?", Damit jeder es verstehen kann, ohne schwierige Wörter oder Formeln zu verwenden. Es ist vielleicht am einfachsten zu verstehen.

[Tensor Flow bezogen]

Sugyan-Memo Er hat verschiedene Beispiele mit TensorFlow geschrieben und ist jenseits der Memo-Ebene. (Wenn Sie diesen Hinweis übersehen, wird persönlicher Interviewartikel bei jedem Öffnen von Facebook als Werbung empfohlen. War w) ④ TensorFlow-Tutorial Japanische Übersetzung Er hat das offizielle TensorFlow-Tutorial ins Japanische übersetzt. Ich bin dankbar, dass sowohl Anfänger als auch Fortgeschrittene es ins Japanische übersetzt haben. ⑤ Ich bin weder Programmierer noch Datenwissenschaftler, aber ich habe Tensorflow einen Monat lang berührt, daher ist es sehr einfach zu verstehenSeit ich Tensorflow 2 Monate lang berührt habe, habe ich das Faltungsnetzwerk auf leicht verständliche Weise mit 95,04% der "handgeschriebenen Hiragana" -Identifikation erklärt. Die beiden oben genannten erklärten das TensorFlow-Tutorial, das beim Lernen sehr hilfreich war! ⑦ Gesichtserkennung für Momokuro-Mitglieder durch TensorFlowIdentifizieren Sie die Produktionsfirma von Anime Yuruyuri mit TensorFlow Dieses Mal habe ich auf die beiden oben genannten auf Codeebene Bezug genommen. Ohne diesen Artikel könnte ich nichts machen, was funktionieren würde. Ich bin zutiefst dankbar m (_ _) m

Wenn man es so betrachtet, gibt es überraschend viele Menschen in Japan, die TensorFlow berühren. Es war der Eindruck, dass. Vielen Dank an alle, die mir geholfen haben m (_ _) m

2. Entwerfen Sie ein Trainingsmodell für TensorFlow

Schreiben wir nun die Verarbeitung von TensorFlow. TensorFlows ** "Learning Model Design" ** ist vielleicht der wichtigste Teil des Deep Learning. Vielleicht ist es keine Übertreibung zu sagen, dass dieses ** "Entwerfen eines Lernmodells (neuronales Netzwerk) tiefes Lernen ist" **.

Bevor Sie sich darauf einlassen, probieren Sie das TensorFlow-Tutorial usw. aus und stellen Sie sicher, dass TensowFlow mindestens installiert ist und ordnungsgemäß funktioniert. (Es ist sogar noch besser, das erweiterte CNN-Tutorial auszuprobieren.)

Das TensorFlow-Setup und die Tutorials werden hier weggelassen. Referenz: Implementierung des TensorFlow MNIST für ML-Anfänger-Tutorials

Die Struktur des TensorFlow-Lernmodells (neuronales Netzwerk) wird diesmal das ** Faltungs-Neuronale Netzwerk (CNN) ** sein, das in der Expertenausgabe des TensorFlow-Tutorials erläutert wird. Da wir mit der Struktur einer Ebene versteckter Ebenen fortfahren werden, denke ich, dass sie genau dieselbe Struktur hat wie das Tutorial **.

In Bezug auf die Verzeichnisstruktur habe ich den Ordner mit den Gesichtsbilddaten und die mit Tensorflow verbundenen Verarbeitungsdateien in einem Ordner namens Tensorflow abgelegt, der durch Installation von Tensorflow gemäß der Formel erstellt wurde. (Dieses Mal wird die Verarbeitung in Bezug auf das Entwerfen des Lernmodells und die Ausführung des Lernens in einer Datei mit dem Namen "main.py" zusammengefasst. Der folgende Code ist Teil von "main.py".)

Verzeichnisaufbau


/tensoflow
  main.py(Ich werde hier das Lernmodell und den Lernprozess schreiben)
  eval.py(Eine Datei, die die Fallergebnisse eines Bildes zurückgibt)
  /data(Im vorherigen Artikel gesammelte Gesichtsdaten)
    /train
      /zuckerbuerg
      /elonmusk
      /billgates
      data.txt
    /test
      /zuckerbuerg
      /elonmusk
      /billgates
      data.txt
Danach befinden sich die Ordner und Dateien, die bei der Installation von Tensorflow erstellt wurden, im Tensorflow-Ordner.

(Ich habe mein Bestes versucht, einen Kommentar im Code zu hinterlassen, aber ich verstehe ihn nicht perfekt, und ich würde es begrüßen, wenn Sie darauf hinweisen könnten, dass etwas damit nicht stimmt m (_ _) m Wie auch immer, ich hatte den Eindruck, dass die von TensorFlow bereitgestellten Funktionen alle detaillierten Berechnungen durchgeführt haben. )

main.py(Lernmodell Teil von)


  #Lernmodell Teil der KI(neurales Netzwerk)Erschaffen
  # images_placeholder:Platzhalter fuer Bild, keep_prob:Abbrecherquote Ort_Inhaber wird ein Argument
  #Gibt die Wahrscheinlichkeit jedes Etiketts für das Eingabebild aus und gibt sie zurück
  def inference(images_placeholder, keep_prob):

    #Gewichtsstandardabweichung 0.Initialisieren Sie mit einer Normalverteilung von 1
    def weight_variable(shape):
      initial = tf.truncated_normal(shape, stddev=0.1)
      return tf.Variable(initial)

    #Vorspannung zur Standardabweichung 0.Initialisieren Sie mit einer Normalverteilung von 1
    def bias_variable(shape):
      initial = tf.constant(0.1, shape=shape)
      return tf.Variable(initial)

    #Erstellen Sie eine Faltungsebene
    def conv2d(x, W):
      return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

    #Erstellen Sie eine Pooling-Ebene
    def max_pool_2x2(x):
      return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                            strides=[1, 2, 2, 1], padding='SAME')

    #28px Bilddateneingabe im Vektorformat*Kehren Sie zum 28px-Bild zurück(Vielleicht)。
    #Diesmal ist es ein Farbbild also 3(1 für Monochrom)
    x_image = tf.reshape(images_placeholder, [-1, IMAGE_SIZE, IMAGE_SIZE, 3])

    #Erstellen Sie die erste Ebene der Faltungsschicht
    with tf.name_scope('conv1') as scope:
      #Das Argument ist[width, height, input, filters]。
      # 5px*Filtern von Bildern im 5px-Bereich
      #Eingabe ist 3, da es sich diesmal um ein Farbbild handelt(Vielleicht)
      #32 Funktionen erkennen
      W_conv1 = weight_variable([5, 5, 3, 32])
      #Ersetzen Sie den Bias-Wert
      b_conv1 = bias_variable([32])
      #Die Teile, die wahrscheinlich als Features nützlich sind, bleiben übrig, und die Teile, die wahrscheinlich nicht als Features verwendet werden, bleiben übrig
      #Verstehen, dass es nicht als Feature als 0 behandelt wird(Relu-Funktion)
      h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)

    #Erstellung der Pooling-Schicht 1
    # 2*Erstellen Sie einen Rahmen mit 2 Größen und setzen Sie die Merkmale im Rahmen auf 1.*Konvertiert in eine Größe von 1(Funktionen komprimieren)。
    #Dieser Rahmen 2*Verstehen Sie diese Folie um 2, um Komprimierungsarbeit auf das gesamte Bild anzuwenden
    #Fassen Sie die durch grobes Verständnis unterteilten Merkmale etwas besser zusammen(Kompresse)
    with tf.name_scope('pool1') as scope:
      h_pool1 = max_pool_2x2(h_conv1)

    #Erzeugung der zweiten Schicht der Faltungsschicht
    with tf.name_scope('conv2') as scope:
      #Erneutes Filtern mit der Ausgabe der ersten Ebene als Eingabe der zweiten Ebene
      # 5px*Bild im Bereich von 5px(?)Filtert
      #Die Eingabe ist 32, da die Ausgabe von 32 Merkmalen der ersten Schicht eingegeben wird.
      #64 Funktionen erkennen
      W_conv2 = weight_variable([5, 5, 32, 64])
      #Ersetzen Sie den Bias-Wert(Gleich wie die erste Schicht)
      b_conv2 = bias_variable([64])
      #Anordnung der erkannten Merkmale(Gleich wie die erste Schicht)
      h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)

    #Erstellung der Pooling-Schicht 2(Gleich wie Bohrschicht 1)
    with tf.name_scope('pool2') as scope:
      h_pool2 = max_pool_2x2(h_conv2)

    #Erstellung der vollständig verbundenen Schicht 1
    with tf.name_scope('fc1') as scope:
      W_fc1 = weight_variable([7*7*64, 1024])
      b_fc1 = bias_variable([1024])
      #Konvertieren Sie die Bildanalyse in einen Vektor
      h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
      #Wie beim ersten und zweiten aktiviert es die erkannten Funktionen.
      h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
      #Dropout-Einstellungen
      #Es ist nur für Trainingsdaten optimiert und daher nicht wirklich verwendbar
      #Es scheint eine Rolle bei der Verhinderung von "Überlernen" zu spielen, das zur KI wird
      h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

    #Erstellung der vollständig verbundenen Schicht 2(Ebene lesen)
    with tf.name_scope('fc2') as scope:
      W_fc2 = weight_variable([1024, NUM_CLASSES])
      b_fc2 = bias_variable([NUM_CLASSES])

    #Normalisierung durch Softmax-Funktion
    #Konvertieren Sie die bisherige Ausgabe des neuronalen Netzwerks in die Wahrscheinlichkeit jedes Labels
    with tf.name_scope('softmax') as scope:
      y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)

    #Wahrscheinlichkeit jedes Etiketts(Etwas wie?)Gib es zurück. Addieren Sie alle berechneten Wahrscheinlichkeiten für jedes Etikett, um 1 zu erhalten
    return y_conv

Dies ist das einzige Lernmodelldesign, aber was wir tun

** ① Nehmen Sie das, was Sie als Eingabe charakterisieren möchten, und übertragen Sie es auf die oberste (nächste) Ebene → ② Lernen Sie verschiedene Dinge gemäß dem Lernmodell dieser Ebene, um die Merkmale zu erkennen und auszugeben → ③ Die vorherige Ebene Die Ausgabe (Merkmal) von wird als Eingabe an die nächste Schicht übertragen, und ① bis ③ werden für die Anzahl der Schichten wiederholt → ④ Die Wahrscheinlichkeit, dass die erste Eingabe am Ende mit dem vorbereiteten Etikett übereinstimmt Rückkehr**

Mir ist bewusst, dass es so ist.

In TensorFlow liegen die Daten im ** Tensol-Format ** (Daten wie eine Matrix) vor, und die Daten fließen immer mehr zu jeder Schicht, sodass es sich um ** "TensorFlow" ** handelt. Und wenn diese ** Hierarchie tiefer wird, lernen wir immer mehr Funktionen **, also ist es ** "Deep Learning" **. Das war's! Leicht verständliche Benennung. w

3. Visualisieren Sie das entworfene Lernmodell (neuronales Netzwerk).

Mit der mit TensorFlow gelieferten Funktion ** TensorBoard ** können Sie sie mit dieser entworfenen neuronalen Netzwerkstruktur visuell anzeigen.

Zugriff auf 6006!


#### **`./Geben Sie für Daten das Verzeichnis an, in dem die Trainingsdaten gespeichert sind. Ich lege die Bilder in ein Verzeichnis namens Daten.`**

Dieses TensorBoard scheint eine der charakteristischen Funktionen von TensorFlow zu sein, und es ist sicherlich erstaunlich, verschiedene Ergebnisse leicht zu sehen. Sie können mehr über TensorBoard von Google erfahren. Möglicherweise können Sie die Grafik erst sehen, wenn Sie die Daten tatsächlich trainiert haben (?)

スクリーンショット 2017-05-08 22.19.21.png

Hmmmmmmmm. sicherlich

** Das als Bildplatzhalter eingegebene Bild umformen → in die 1. Ebene (conv1) eingeben → 1. Pooling (pool1) → an die 2. Ebene (conv2) übergeben → …… **

Es scheint genau so zu sein wie die neuronale Netzwerkstruktur des entworfenen Lernmodells. groß. Einfach zu verstehen.

Der Name jeder Schicht (z. B. conv1) wird im `mit tf.name_scope ('conv1') als Gültigkeitsbereich benannt:` Teil des obigen Trainingsmodellcodes. Es scheint, dass die Einstellung von TensorBorad selbst in dem Teil von `` summary_writer = tf.train.SummaryWriter (FLAGS.train_dir, sess.graph_def) `erfolgt, der später im Code erscheint.

Die verborgene Schicht des Lernmodells ist diesmal eine Schicht, aber die weltweit stärkste AI Go-Software "AlphaGo" scheint bei Betrachtung dieser neuronalen Netzwerkstruktur lächerlich kompliziert zu sein. (Ich denke, es war irgendwo in einem Artikel.)

③ Lassen Sie das Lernmodell die Daten tatsächlich trainieren

Dies ist das Ende des ** Entwurfs eines Lernmodells **, das für die Verwendung von TensorFlow am wichtigsten zu sein scheint. (Obwohl es dasselbe ist wie dieses Tutorial.) Als nächstes verwenden wir dieses entworfene Lernmodell, um die große Menge der zuvor gesammelten Gesichtsdaten zu lernen. Die Fortsetzung dürfte wieder lang sein, also aus dem Artikel unten ↓

Klicken Sie hier für den folgenden ** Teil 3 **: Erstellen einer KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert ③ (Datenlernen)


** "Erstelle eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert" <Vollständiger Artikel> ** Teil 1: Erstellen einer KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert ① (Vorbereitung von Lerndaten) Teil 2: Erstellen einer KI, die Zuckerbergs Gesicht durch tiefes Lernen identifiziert ② (KI-Modellbau) Teil 3: Erstellen einer KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert ③ (Datenlernen) Teil 4: KI erstellen, die Zuckerbergs Gesicht durch tiefes Lernen identifiziert ④ (WEB-Konstruktion)

GitHub:https://github.com/AkiyoshiOkano/zuckerberg-detect-ai

Ergebnis der Bonusbeurteilung

Urteilsergebnis des Spielens mit dem Zuckerberg-Detektor

Herr Bill Gates, der nach dem Entwicklungsfluss urteilen konnte gates5.png


Auch Mr. Ilone Mask elon4.png


Präsident Trump beurteilen スクリーンショット 2017-05-07 1.00.21.png

Recommended Posts

Erstellen Sie eine KI, die Zuckerbergs Gesicht mit Deep Learning identifiziert (KI-Modellbau)
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert WE (WEB-Konstruktion)
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert ① (Vorbereitung von Lerndaten)
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert learning (Datenlernen)
[AI] Deep Metric Learning
Erklären und bewegen Sie das SMIS-Modell, das durch tiefes Lernen "Kleidung virtuell anprobieren" kann
Ich habe versucht, Othello AI zu machen, dass ich 7,2 Millionen Hände durch tiefes Lernen mit Chainer gelernt habe
Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
Über den kürzesten Weg, um ein Bilderkennungsmodell durch maschinelles Lernen zu erstellen und eine Android-Anwendung zu implementieren