[PYTHON] J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --⑥ Programme d'apprentissage

introduction

C'est très facile à lire et les commentaires sont soigneusement écrits, donc même moi, un débutant en Python, pouvais comprendre ce que je faisais.

programme

main.py


#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys
import cv2
import random
import numpy as np
import tensorflow as tf
import tensorflow.python.platform

#Nombre d'étiquettes d'identification(Cette fois Kyo:0,Kaoru: 1,Shinya:2 donc 3)
NUM_CLASSES = 3

#Taille de l'image lors de l'apprentissage(px)
IMAGE_SIZE = 28

#Nombre de dimensions de l'image(28* 28*Couleur(?))
IMAGE_PIXELS = IMAGE_SIZE*IMAGE_SIZE*3

#Définir le chemin des données nécessaires à l'apprentissage et l'échelle de l'apprentissage
#Fonction intégrée TensorFlow qui peut enregistrer les réglages de paramètres, les valeurs par défaut et les explications de l'écran d'aide
flags = tf.app.flags
FLAGS = flags.FLAGS

#Données d'entraînement
flags.DEFINE_string('train', '/workspace/dir/train/data.txt', 'File name of train data')

#Vérification des données de test
flags.DEFINE_string('test', '/workspace/dir/test/data.txt', 'File name of train data')

#Dossier dans lequel les données sont placées
flags.DEFINE_string('train_dir', /workspace/dir/data', 'Directory to put the training data.')

#Nombre d'essais de formation à l'apprentissage des données
flags.DEFINE_integer('max_steps', 100, 'Number of steps to run trainer.')

#Combien d'images à utiliser dans une étude
flags.DEFINE_integer('batch_size', 20, 'Batch size Must divide evenly into the dataset sizes.')

#Si le taux d'apprentissage est trop petit, l'apprentissage ne se poursuivra pas, et s'il est trop grand, l'erreur ne convergera ni ne divergera.
flags.DEFINE_float('learning_rate', 1e-4, 'Initial learning rate.')

#Modèle d'apprentissage faisant partie de l'IA(réseau neuronal)Créer
# images_placeholder:Espace réservé pour l'image, keep_prob:lieu de taux d'abandon_titulaire devient un argument
#Sort et renvoie la probabilité de chaque étiquette pour l'image d'entrée

####
###Ajouter le traitement du modèle de formation ici
####

if __name__ == '__main__':
  #Fichier ouvert
  f = open(FLAGS.train, 'r')

  #Tableau pour mettre des données
  train_image = []
  train_label = []

  for line in f:
    #Séparé par des espaces sauf pour les sauts de ligne
    line = line.rstrip()
    l = line.split()

    #Lire les données et réduire à 28x28
    img = cv2.imread(l[0])
    img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))

    #Après avoir fait la queue, 0-Défini sur une valeur flottante de 1
    train_image.append(img.flatten().astype(np.float32)/255.0)

    #Étiquette 1-of-Préparez-vous avec la méthode k
    tmp = np.zeros(NUM_CLASSES)
    tmp[int(l[1])] = 1
    train_label.append(tmp)
 
  #Convertir au format numpy
  train_image = np.asarray(train_image)
  train_label = np.asarray(train_label)
  f.close()

  f = open(FLAGS.test, 'r')
  test_image = []
  test_label = []
  for line in f:
    line = line.rstrip()
    l = line.split()
    img = cv2.imread(l[0])
    img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
    test_image.append(img.flatten().astype(np.float32)/255.0)
    tmp = np.zeros(NUM_CLASSES)
    tmp[int(l[1])] = 1
    test_label.append(tmp)
  test_image = np.asarray(test_image)
  test_label = np.asarray(test_label)
  f.close()

  #Spécifiez la portée à afficher dans le graphique TensorBoard
  with tf.Graph().as_default():
    #Tensor pour insérer des images(28*28*3(IMAGE_PIXELS)N'importe quel nombre d'images dimensionnelles(None)J'ai une minute)
    images_placeholder = tf.placeholder("float", shape=(None, IMAGE_PIXELS))

    #Tenseur pour mettre une étiquette(3(NUM_CLASSES)N'importe quel nombre d'étiquettes dimensionnelles(None)Entrez les minutes)
    labels_placeholder = tf.placeholder("float", shape=(None, NUM_CLASSES))

    #Tensor temporaire pour mettre le taux d'abandon
    keep_prob = tf.placeholder("float")

    # inference()Faire un modèle
    logits = inference(images_placeholder, keep_prob)

    # loss()Pour calculer la perte
    loss_value = loss(logits, labels_placeholder)

    # training()Pour former et ajuster les paramètres du modèle d'apprentissage
    train_op = training(loss_value, FLAGS.learning_rate)

    #Calcul de la précision
    acc = accuracy(logits, labels_placeholder)

    #Prêt à économiser
    saver = tf.train.Saver()

    #Créer une session(Les calculs TensorFlow doivent être effectués dans une session absolue)
    sess = tf.Session()

    #Initialisation variable(Initialiser après le démarrage de la session)
    sess.run(tf.global_variables_initializer())

    #Paramètres d'affichage du TensorBoard(Déclaratif du Tensor Board?)
    summary_op = tf.summary.merge_all()

    # train_Spécifiez le chemin pour sortir le journal TensorBoard avec dir
    summary_writer = tf.summary.FileWriter(FLAGS.train_dir, sess.graph)

    #En fait max_Exécuter l'entraînement autant de fois que l'étape
    for step in range(FLAGS.max_steps):
      for i in range(len(train_image)/FLAGS.batch_size):
        # batch_Exécution de la formation pour les images de taille
        batch = FLAGS.batch_size*i

        # feed_Spécifiez les données à mettre dans l'espace réservé avec dict
        sess.run(train_op, feed_dict={
          images_placeholder: train_image[batch:batch+FLAGS.batch_size],
          labels_placeholder: train_label[batch:batch+FLAGS.batch_size],
          keep_prob: 0.5})

      #Calculez la précision après chaque étape
      train_accuracy = sess.run(acc, feed_dict={
        images_placeholder: train_image,
        labels_placeholder: train_label,
        keep_prob: 1.0})
      print "step %d, training accuracy %g"%(step, train_accuracy)

      #Ajouter une valeur à afficher sur le TensorBoard après chaque étape
      summary_str = sess.run(summary_op, feed_dict={
        images_placeholder: train_image,
        labels_placeholder: train_label,
        keep_prob: 1.0})
      summary_writer.add_summary(summary_str, step)

  #Afficher la précision des données de test après l'entraînement
  print "test accuracy %g"%sess.run(acc, feed_dict={
    images_placeholder: test_image,
    labels_placeholder: test_label,
    keep_prob: 1.0})

  #Former les données et enregistrer le modèle final
  # "model.ckpt"Est le nom du fichier de sortie
  save_path = saver.save(sess, "model2.ckpt")

Suppléments et excuses

Tous les liens de page

Recommended Posts

J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --⑥ Programme d'apprentissage
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --⑧ Exécution d'apprentissage
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --⑦ Modèle d'apprentissage
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow - (1) Introduction
J'ai créé un classificateur de visage Dir en gray en utilisant l'extraction de visage TensorFlow-④
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow - Test de classification de visage
J'ai essayé de faire un classificateur de visage Dir en gris en utilisant TensorFlow --⑬ Jouer (final)
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --⑫ Version Web
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --② Construction de l'environnement
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow - Préparation de la version Web
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Détection de visage à l'aide d'un classificateur en cascade
J'ai fait un programme de gestion de la paie en Python!
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
Une histoire sur l'apprentissage automatique simple avec TensorFlow
J'ai créé un programme cryptographique César en Python.
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
J'ai créé un jeu d'introduction au festival scolaire avec Ren'py
〇✕ J'ai fait un jeu
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
J'ai fait un kit d'apprentissage pour word2vec / doc2vec / GloVe / fastText
J'ai essayé de faire un diagnostic de visage AI pour les golfeuses professionnelles ③
J'ai créé une application d'estimation de l'entraînement musculaire à l'aide du SDK Qore
J'ai créé un guide de programme original en utilisant l'API de guide de programme NHK.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai essayé la reconnaissance faciale avec Face ++
J'ai fait un texte Python
J'ai essayé d'utiliser magenta / TensorFlow
J'ai fait un robot discord
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
J'ai créé un jeu appelé Battle Ship en utilisant pygame et tkinter
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
Vous ne voulez pas dire que vous avez créé un programme de reconnaissance faciale?
J'ai essayé de marquer un concours de travesti en utilisant l'API Detect de Face ++
J'ai créé un programme de sortie de table de nombres premiers dans différentes langues
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic