[PYTHON] Ein Anfänger des maschinellen Lernens versuchte an einem Tag, eine Sheltie-Urteils-KI zu erstellen

Vielen Dank

Zunächst habe ich es als Referenz verwendet. Vielen Dank.

https://qiita.com/yottyann1221/items/a08300b572206075ee9f https://qiita.com/tomo_20180402/items/e8c55bdca648f4877188 https://qiita.com/mainvoidllll/items/db991dc30d3ddced6250 https://newtechnologylifestyle.net/keras_imagedatagenerator/

Ich habe kostenlose Bilder für die veröffentlichten Bilder verwendet. https://pixabay.com/ja/

Einführung

Einführung in das maschinelle Lernen. Es scheint, dass es nach einer kurzen Runde so weitergehen wird.

  1. Bereiten Sie eine große Anzahl von Bildern vor
  2. Erstellen Sie Lehrer- / Testdaten
  3. Erstellen Sie ein Modell
  4. Mit Modell auswerten

Dieses Mal habe ich beschlossen, ein Shelty-Assessment-Programm mit Bilderkennung zu erstellen.

Umgebung

Ich habe Python3 unter Windows 10 in schokoladig gesetzt. Erstellen Sie mit venv eine virtuelle Umgebung und stellen Sie die erforderlichen Bibliotheken bereit.

> mkdir -p e:\python\ml
> cd e:\python\ml
> python -m venv ml
> .\ml\Scripts\activate
(ml)> pip install requests
(ml)> pip install beautifulsoup4
#Ich erhalte die folgende Fehlermeldung, wenn ich lxml nicht einbinde
# bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
(ml)> pip install lxml
(ml)> pip install pillow
#Setzen Sie die neueste Nummer und np.load()Dann erscheint der folgende Fehler, geben Sie also die alte Version an
# ValueError: Object arrays cannot be loaded when allow_pickle=False
(ml)> pip install numpy==1.16.2
(ml)> pip install sklearn
(ml)> pip install tensorflow
(ml)> pip install keras
(ml)> pip install matplotlib

Verfassung

Ich habe es so gemacht.

e:\python\ml
├─ml
└─src
   ├─data
   │ ├─img
   │ │ ├─original              :Originalbild durch Schaben erhalten
Elty │ │ ├ Shelty
Org │ │ ├ Corgi
Coll │ │ └ Border Collie
   │ │ ├─trimmed               :Bild nach dem Entfernen unnötiger Bilder verlassen
Elty │ │ ├ Shelty
Org │ │ ├ Corgi
Coll │ │ └ Border Collie
   │ │ ├─excluded              :Unnötiges Bild
Elty │ │ ├ Shelty
Org │ │ ├ Corgi
Coll │ │ └ Border Collie
   │ │ ├─extended              :Bild, das durch Verarbeiten des verbleibenden Bildes aufgeblasen wird
Elty │ │ ├ Shelty
Org │ │ ├ Corgi
Coll │ │ └ Border Collie
   │ │ └─test                  :Bild zur Überprüfung der Funktionsweise von AI
   │ ├─train_test_data
   │ │ └─data.npy              :Lehrer- / Testdaten, die mit erweiterten Bildern erstellt wurden
   │ ├─model                   :Modell erstellt
   │ │ ├─Training_and_validation_accuracy.png
   │ │ ├─Training_and_validation_loss.png
   │ │ ├─model_predict.hdf5
   │ │ └─model_predict.json
   ├─img_scraper               :Bildkratzen
   │ ├─google_search.py
   │ └─main.py
   ├─img_trimmer               :Bildentfernung
   │ └─main.py
   ├─img_duplicator            :Bildauffüllung
   │ └─main.py
   ├─train_test_data_generator :Erstellung von Lehrer- / Testdaten
   │ └─main.py
   ├─model_generator           :Modellgenerierung
   │ └─main.py
   └─ai                        :Shelty Urteil
     └─main.py

Bildkratzen

Bereiten Sie zunächst ein Bild vor. Dieses Mal habe ich 300 Blatt gleichzeitig abgekratzt.

img_scraper\google_search.py
# -- coding: utf-8 --

import json
from urllib import parse
import requests
from bs4 import BeautifulSoup

class Google:
    def __init__(self):
        self.GOOGLE_SEARCH_URL = 'https://www.google.co.jp/search'
        self.session = requests.session()
        self.session.headers.update({
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0'})

    def Search(self, keyword, type='text', maximum=1000):
        '''Google-Suche'''
        print('Google', type.capitalize(), 'Search :', keyword)
        result, total = [], 0
        query = self.query_gen(keyword, type)
        while True:
            #Suche
            html = self.session.get(next(query)).text
            links = self.get_links(html, type)

            #Suchergebnisse hinzufügen
            if not len(links):
                print('-> No more links')
                break
            elif len(links) > maximum - total:
                result += links[:maximum - total]
                break
            else:
                result += links
                total += len(links)

        print('->Ergebnis', str(len(result)), 'Ich habe die Links von')
        return result

    def query_gen(self, keyword, type):
        '''Suchabfrage-Generator'''
        page = 0
        while True:
            if type == 'text':
                params = parse.urlencode({
                    'q': keyword,
                    'num': '100',
                    'filter': '0',
                    'start': str(page * 100)})
            elif type == 'image':
                params = parse.urlencode({
                    'q': keyword,
                    'tbm': 'isch',
                    'filter': '0',
                    'ijn': str(page)})

            yield self.GOOGLE_SEARCH_URL + '?' + params
            page += 1

    def get_links(self, html, type):
        '''Link abrufen'''
        soup = BeautifulSoup(html, 'lxml')
        if type == 'text':
            elements = soup.select('.rc > .r > a')
            links = [e['href'] for e in elements]
        elif type == 'image':
            elements = soup.select('.rg_meta.notranslate')
            jsons = [json.loads(e.get_text()) for e in elements]
            links = [js['ou'] for js in jsons]
        return links
img_scraper\main.py
# -- coding: utf-8 --

import os
import requests
import google_search

#Suchbegriff
KEYWORDS = [u'Shelty', u'Corgi', u'Border Collie']
#Anzahl der zu erfassenden Bilder
IMG_CNT = 300

g = google_search.Google()
for keyword in KEYWORDS:
    #Erstellen Sie ein Sicherungsziel
    img_dir = os.path.join('./../data/img/original', keyword)
    os.makedirs(img_dir, exist_ok=True)
    print(u'Ziel: {}'.format(img_dir))
    #Bildersuche
    img_urls = g.Search('{} filetype:jpg -Shiba Hund-fühlte-Produkt-Spielzeug-Plüschpuppe-Ornament-Artikel-Maskottchen-Buch-Startseite-Filme-Karikatur-Charme-jpg -Rakuten-Eine Illustration-Aufkleber-Versandhandel-LINE -Stempel-Silhouette-Design-Becher-Züchter-Jimoty-Gruppe-Herde-Nagel-Kran-Werbegeschenk-Produkt'.format(keyword), type='image', maximum=IMG_CNT)   
    #Bild speichern
    total_cnt = 0
    for i,img_url in enumerate(img_urls):
        try:
            #Bildpfad
            img_full_path = os.path.join(img_dir, (str(i) + '.jpg'))
            print('{}: {} -> {}'.format(str(i), img_url, img_full_path))
            re = requests.get(img_url, allow_redirects=False)
            if len(re.content) <= 0:
                print(u'{}:Überspringen, da der Inhalt der Antwort leer ist.'.format(str(i)))
                continue
            with open(img_full_path, 'wb') as f:
                f.write(re.content)
                total_cnt = total_cnt + 1
        except requests.exceptions.ConnectionError:
            continue
        except UnicodeEncodeError:
            continue
        except UnicodeError:
            continue
        except IsADirectoryError:
            continue
    print(u'{}: {}Ich habe das Bild.'.format(keyword, total_cnt))

print(u'Das Speichern ist abgeschlossen.')
> cd e:\python\ml\src\img_scraper
> python main.py
Shelty:Wir haben 270 Bilder aufgenommen.
Corgi:Wir haben 286 Bilder aufgenommen.
Border Collie:Wir haben 281 Bilder aufgenommen.

Es scheint, dass einige von ihnen das Bild nicht gut speichern konnten.

Bildprüfung

Entfernen Sie Bilder, die nicht als Lehrerdaten verwendet werden können. Zum Beispiel gibt es andere Hunderassen auf dem Bild oder viel Text. Notieren Sie sich daher die Anzahl dieser Bilder. Verwenden Sie danach Python, um die für Lehrerdaten und das Ausschlussziel verwendeten Daten zu sortieren.

img_trimmer\main.py
# -- coding: utf-8 --

import os, glob
import shutil

#Suchbegriff
KEYWORDS = [u'Shelty', u'Corgi', u'Border Collie']

targets = [
    [19, 25, 34, 40, 41, 49, 54, 74, 77, 81, 86, 89, 91, 93, 102, 104, 108, 111, 118, 119, 124, 127, 130, 131, 132, 136, 152, 154, 158, 159, 161, 168, 169, 173, 178, 181, 183, 184, 192, 193, 198, 201, 202, 213, 218, 233, 235, 236, 238, 240, 243, 245, 246, 248, 249, 252, 255, 264, 265, 269, 271, 272, 280, 283, 284, 287, 294, 295],
    [19, 29, 30, 40, 45, 67, 69, 73, 76, 78, 80, 100, 101, 105, 117, 120, 132, 136, 141, 143, 149, 151, 154, 158, 167, 170, 179, 180, 183, 186, 200, 201, 208, 213, 220, 224, 225, 228, 234, 235, 241, 243, 247, 248, 250, 253, 259, 262, 264, 266, 273, 277, 278, 279, 281, 282, 283, 285, 290, 293, 294, 298, 299],
    [9, 21, 25, 37, 38, 40, 41, 42, 49, 52, 55, 61, 65, 66, 71, 72, 78, 80, 89, 93, 96, 103, 108, 110, 113, 114, 118, 122, 126, 127, 128, 145, 146, 152, 158, 160, 161, 164, 166, 167, 171, 174, 175, 176, 182, 183, 186, 187, 193, 194, 196, 197, 200, 202, 203, 206, 207, 222, 223, 224, 226, 228, 230, 232, 233, 234, 237, 238, 241, 243, 244, 257, 259, 260, 262, 263, 264, 265, 267, 268, 270, 273, 275, 276, 277, 278, 281, 282, 283, 287, 289, 292, 293, 295]
    ]

for idx, keyword in enumerate(KEYWORDS):
    total_count = 0
    #Original
    img_dir = os.path.join('./../data/img/original', keyword)
    #Kopieren nach
    os.makedirs(os.path.join('./../data/img/trimmed', keyword), exist_ok=True)
    os.makedirs(os.path.join('./../data/img/excluded', keyword), exist_ok=True)
    files = glob.glob(os.path.join(img_dir, '*.jpg'))
    for f in files:
        if int(os.path.splitext(os.path.basename(f))[0]) in targets[idx]:
            shutil.copy2(f, os.path.join('./../data/img/excluded', keyword))
            print(u'{} :Es ist ein Ausschlussziel.'.format(f))
        else:
            shutil.copy2(f, os.path.join('./../data/img/trimmed', keyword))
            print(u'{} :Wird für Lehrerdaten verwendet.'.format(f))
            total_count = total_count + 1
    print(u'{} :{}'.format(keyword, total_count))


print(u'')
> cd e:\python\ml\src\img_trimmer
> python main.py
:
:Es ist eine Sache. Das Speichern ist abgeschlossen. Shelty Die Anzahl der Daten, die verwendet werden können, beträgt 202. Corgi Die Anzahl der Daten, die verwendet werden können, beträgt 223.
Border Collie:Die Anzahl der Daten, die verwendet werden können, beträgt 187.

Nur 60 bis 70% können als Lehrerdaten verwendet werden.

Bildvervielfältigung

Erhöhen Sie die Anzahl der Daten, indem Sie das Bild mit ImageDataGenerator von Keras duplizieren und verarbeiten.

img_duplicator\main.py
# -- coding: utf-8 --

import os
import glob
import numpy as np
from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array, array_to_img


CATEGORIES = [u'Shelty', u'Corgi', u'Border Collie']
#Bildgröße
IMG_SIZE = 150

#Definieren Sie ImageDataGenerator
DATA_GENERATOR = ImageDataGenerator(horizontal_flip=0.3, zoom_range=0.1)

for idx, category in enumerate(CATEGORIES):
    #Original
    img_dir = os.path.join('./../data/img/trimmed', category)
    #Kopieren nach
    out_dir = os.path.join('./../data/img/extended', category)
    os.makedirs(out_dir, exist_ok=True)

    files = glob.glob(os.path.join(img_dir, '*.jpg'))
    for i, file in enumerate(files):
        img = load_img(file)
        img = img.resize((IMG_SIZE, IMG_SIZE))
        x = img_to_array(img)
        x = np.expand_dims(x, axis=0)
        g = DATA_GENERATOR.flow(x, batch_size=1, save_to_dir=out_dir, save_prefix='img', save_format='jpg')
        for i in range(10):
            batch = g.next()
    print(u'{} :Die Anzahl der Dateien{}Es ist eine Sache.'.format(category, len(os.listdir(out_dir))))
> cd e:\python\ml\src\img_duplicator
> python main.py
Using TensorFlow backend.
Shelty:Die Anzahl der Dateien beträgt 1817.
Corgi:Die Anzahl der Dateien beträgt 1983.
Border Collie:Die Anzahl der Dateien beträgt 1708.

Erstellung von Lehrerdaten

Da wir eine große Anzahl von Bildern vorbereitet haben, werden wir Lehrerdaten erstellen. Ich werde das Bild beschriften. Etwa 20% aller Daten werden für Testdaten verwendet. Speichern Sie die erstellten Lehrer- / Testdaten.

train_test_data_generator\main.py
# -*- coding: utf-8 -*-

from PIL import Image
import os, glob
import numpy as np
import random, math
from sklearn.model_selection import train_test_split
from keras.utils import np_utils

#Der Pfad des Stammverzeichnisses, in dem das Bild gespeichert ist
IMG_ROOT_DIR = './../data/img/extended'
#Kategorie
CATEGORIES = [u'Shelty', u'Corgi', u'Border Collie']
#Dichte
DENSE_SIZE = len(CATEGORIES)
#Bildgröße
IMG_SIZE = 150
#Bilddaten
X = []
#Kategoriedaten
Y = []
#Lehrerdaten
X_TRAIN = []
Y_TRAIN = []
#Testdaten
X_TEST = []
Y_TEST = []
#Datenspeicherungsziel
TRAIN_TEST_DATA = './../data/train_test_data/data.npy'


#Prozess nach Kategorie
for idx, category in enumerate(CATEGORIES):
    #Bildverzeichnis für jedes Etikett
    image_dir = os.path.join(IMG_ROOT_DIR, category)
    files = glob.glob(os.path.join(image_dir, '*.jpg'))
    for f in files:
        #Ändern Sie die Größe jedes Bildes und konvertieren Sie es in Daten
        img = Image.open(f)
        img = img.convert('RGB')
        img = img.resize((IMG_SIZE, IMG_SIZE))
        data = np.asarray(img)
        X.append(data)
        Y.append(idx)

X = np.array(X)
Y = np.array(Y)

#Normalisierung
X = X.astype('float32') /255
Y = np_utils.to_categorical(Y, DENSE_SIZE)

#Trennen Sie Lehrerdaten und Testdaten
X_TRAIN, X_TEST, Y_TRAIN, Y_TEST = train_test_split(X, Y, test_size=0.20)

#Lehrer- / Testdaten speichern
np.save(TRAIN_TEST_DATA, (X_TRAIN, X_TEST, Y_TRAIN, Y_TEST))
print(u'Die Erstellung der Lehrer- / Testdaten ist abgeschlossen.: {}'.format(TRAIN_TEST_DATA))
> cd e:\python\ml\src\train_test_data_generator
> python main.py
Using TensorFlow backend.
Die Erstellung der Lehrer- / Testdaten ist abgeschlossen.: ./../data/train_test_data/data.npy

Modellbau

Nachdem wir die Lehrer- / Testdaten bereit haben, ist es Zeit, das Modell zu erstellen. Speichern Sie das erstellte Modell.

model_generator\main.py
# -*- coding: utf-8 -*-

#Ein Modell bauen

from keras import layers, models
from keras import optimizers
import numpy as np
import matplotlib.pyplot as plt
import os

#Kategorie
CATEGORIES = [u'Shelty', u'Corgi', u'Border Collie']
#Dichte
DENSE_SIZE = len(CATEGORIES)
#Bildgröße
IMG_SIZE = 150
INPUT_SHAPE = (IMG_SIZE, IMG_SIZE,3)
#Lehrerdaten
X_TRAIN = []
Y_TRAIN = []
#Testdaten
X_TEST = []
Y_TEST = []
#Datenspeicherungsziel
TRAIN_TEST_DATA = './../data/train_test_data/data.npy'
#Modell speichern Ziel
MODEL_ROOT_DIR = './../data/model/'


# -----Modellbau----- #
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=INPUT_SHAPE))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation="relu"))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128,(3,3),activation="relu"))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128,(3,3),activation="relu"))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512,activation="relu"))
model.add(layers.Dense(DENSE_SIZE,activation="sigmoid"))

#Bestätigung der Modellkonfiguration
model.summary()
# ----- /Modellbau----- #

# -----Modellzusammenstellung----- #
model.compile(loss="binary_crossentropy",
              optimizer=optimizers.RMSprop(lr=1e-4),
              metrics=["acc"])
# ----- /Modellbau----- #

# -----Modelllernen----- #
#Lesen Sie die Lehrerdaten und Testdaten
X_TRAIN, X_TEST, Y_TRAIN, Y_TEST = np.load(TRAIN_TEST_DATA)
model = model.fit(X_TRAIN,
                  Y_TRAIN,
                  epochs=10,
                  batch_size=6,
                  validation_data=(X_TEST, Y_TEST))
# ----- /Modelllernen----- #

# -----Lernergebnisplot----- #
acc = model.history['acc']
val_acc = model.history['val_acc']
loss = model.history['loss']
val_loss = model.history['val_loss']

epochs = range(len(acc))

plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.savefig(os.path.join(MODEL_ROOT_DIR, 'Training_and_validation_accuracy.png'))

plt.figure()

plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.savefig(os.path.join(MODEL_ROOT_DIR, 'Training_and_validation_loss.png'))
# ----- /Lernergebnisplot----- #

# -----Modell speichern----- #
#Modell speichern
json_string = model.model.to_json()
open(os.path.join(MODEL_ROOT_DIR, 'model_predict.json'), 'w').write(json_string)

#Gewichtsspeicher
model.model.save_weights(os.path.join(MODEL_ROOT_DIR, 'model_predict.hdf5'))
# ----- /Modell speichern----- #
> cd e:\python\ml\src\model_generator
> python main.py
Using TensorFlow backend.
2019-11-15 17:02:03.400229: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
conv2d_1 (Conv2D)            (None, 148, 148, 32)      896
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 74, 74, 32)        0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 72, 72, 64)        18496
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 36, 36, 64)        0
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 34, 34, 128)       73856
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 17, 17, 128)       0
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 15, 15, 128)       147584
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 7, 7, 128)         0
_________________________________________________________________
flatten_1 (Flatten)          (None, 6272)              0
_________________________________________________________________
dropout_1 (Dropout)          (None, 6272)              0
_________________________________________________________________
dense_1 (Dense)              (None, 512)               3211776
_________________________________________________________________
dense_2 (Dense)              (None, 3)                 1539
=================================================================
Total params: 3,454,147
Trainable params: 3,454,147
Non-trainable params: 0
_________________________________________________________________
Train on 4396 samples, validate on 1100 samples
Epoch 1/10
4396/4396 [==============================] - 103s 23ms/step - loss: 0.5434 - acc: 0.7298 - val_loss: 0.5780 - val_acc: 0.7067
Epoch 2/10
4396/4396 [==============================] - 109s 25ms/step - loss: 0.4457 - acc: 0.7989 - val_loss: 0.4288 - val_acc: 0.8024
Epoch 3/10
4396/4396 [==============================] - 103s 23ms/step - loss: 0.3874 - acc: 0.8318 - val_loss: 0.3992 - val_acc: 0.8170
Epoch 4/10
4396/4396 [==============================] - 106s 24ms/step - loss: 0.3483 - acc: 0.8469 - val_loss: 0.3476 - val_acc: 0.8476
Epoch 5/10
4396/4396 [==============================] - 107s 24ms/step - loss: 0.3029 - acc: 0.8717 - val_loss: 0.3085 - val_acc: 0.8603
Epoch 6/10
4396/4396 [==============================] - 109s 25ms/step - loss: 0.2580 - acc: 0.8947 - val_loss: 0.2918 - val_acc: 0.8736
Epoch 7/10
4396/4396 [==============================] - 107s 24ms/step - loss: 0.2182 - acc: 0.9084 - val_loss: 0.2481 - val_acc: 0.8970
Epoch 8/10
4396/4396 [==============================] - 113s 26ms/step - loss: 0.1855 - acc: 0.9217 - val_loss: 0.1920 - val_acc: 0.9209
Epoch 9/10
4396/4396 [==============================] - 120s 27ms/step - loss: 0.1548 - acc: 0.9394 - val_loss: 0.1775 - val_acc: 0.9345
Epoch 10/10
4396/4396 [==============================] - 114s 26ms/step - loss: 0.1243 - acc: 0.9530 - val_loss: 0.1738 - val_acc: 0.9412

00.png

01.png

Erstellung eines Shelty-Urteilsprogramms

Es ist endlich Zeit, ein Sheltie-Urteilsprogramm vorzubereiten. Es ist Zeit, ein Bild zur Bestätigung vorzubereiten.

ai\main.py
# -*- coding: utf-8 -*-

from keras import models
from keras.models import model_from_json
from keras.preprocessing import image
import numpy as np
import sys
import os
from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array, array_to_img

#Modell speichern Ziel
MODEL_ROOT_DIR = './../data/model/'
MODEL_PATH = os.path.join(MODEL_ROOT_DIR, 'model_predict.json')
WEIGHT_PATH = os.path.join(MODEL_ROOT_DIR, 'model_predict.hdf5')
#Kategorie
CATEGORIES = [u'Shelty', u'Corgi', u'Border Collie']
#Bildgröße
IMG_SIZE = 150
INPUT_SHAPE = (IMG_SIZE, IMG_SIZE,3)

#Laden Sie das Modell
model = model_from_json(open(MODEL_PATH).read())
model.load_weights(WEIGHT_PATH)

#Bild vom Eingabeargument lesen
args = sys.argv
img = image.load_img(args[1], target_size=INPUT_SHAPE)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

#Mit einem Modell vorhersagen
features = model.predict(x)

print(features)

if features[0, 0] == 1:
    print(u'Das ist Shelty.')
else:
    for i in range(0, len(CATEGORIES)):
        if features[0, i] == 1:
            print(u'Es scheint kein Sheltie zu sein.{}ist.'.format(CATEGORIES[i]))
(ml)> cd e:\python\ml\src\ai
(ml)> python .\main.py '..\data\img\test\sheltie_00.jpg'
Using TensorFlow backend.
2019-11-15 17:58:44.863437: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[1. 0. 0.]]
Das ist Shelty.
(ml)> python .\main.py '..\data\img\test\corgi_00.jpg'
Using TensorFlow backend.
2019-11-15 17:58:55.519838: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[0. 1. 0.]]
Es scheint kein Sheltie zu sein. Das ist Corgi.
(ml)> python .\main.py '..\data\img\test\bordercollie_00.jpg'
Using TensorFlow backend.
2019-11-15 17:59:06.457517: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[0. 0. 1.]]
Es scheint kein Sheltie zu sein. Es ist ein Border Collie.

sheltie_00.jpg Das ist Shelty.

02.jpg

cogy_00.jpg Es scheint kein Sheltie zu sein. Das ist Corgi.

03.jpg

bordercolli_00.png Es scheint kein Sheltie zu sein. Es ist ein Border Collie.

04.jpg

Ich konnte es gut beurteilen.

Ist Fran ein Sheltie?

Wie wird Fran-chan beurteilt, der auch für die Ikone verwendet wird?

(ml)> python .\main.py '..\data\img\test\fran.jpg'
Using TensorFlow backend.
2019-11-15 17:59:28.118592: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[0. 0. 1.]]
Es scheint kein Sheltie zu sein. Es ist ein Border Collie.

fran.png Es scheint kein Sheltie zu sein. Es ist ein Border Collie.

05.jpg

Es tut uns leid. .. .. Obwohl mein Fran ein Sheltie ist, wurde beurteilt, dass "es kein Sheltie zu sein scheint. Es ist ein Border Collie." Der Grund ist wahrscheinlich, dass die Lehrerdaten nur wenige schwarze Shelties enthielten. Ich war mir der Bedeutung von Lehrerdaten sehr bewusst.

Nachtrag

Ich habe das Image geändert und mich gerächt.

(ml)> python .\main.py '..\data\img\test\fran_01.jpg'
Using TensorFlow backend.
2019-11-18 17:21:07.929836: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[1. 0. 0.]]
Das ist Shelty.

fran_01.jpg

Unser Fran wurde als Unterschlupf beurteilt.

Ausblick

Recommended Posts

Ein Anfänger des maschinellen Lernens versuchte an einem Tag, eine Sheltie-Urteils-KI zu erstellen
Das maschinelle Lernen in einem Monat auf ein praktisches Niveau bringen # 1 (Startausgabe)
So passen Sie mehrere Bibliotheken für maschinelles Lernen auf einmal an
Passende App Ich habe versucht, Statistiken über starke Leute zu erstellen und ein Modell für maschinelles Lernen zu erstellen
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Gorilla-Urteilsmaschine, Gorinator! !! Versucht es zu schaffen!
(Maschinelles Lernen) Ich habe versucht, den EM-Algorithmus in der gemischten Gaußschen Verteilung sorgfältig mit der Implementierung zu verstehen.
Ich habe versucht, Gitarrenakkorde in Echtzeit mithilfe von maschinellem Lernen zu klassifizieren
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Textklassifizierung
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (1: Erfassen von Kandidatenbildern mithilfe des Web-API-Dienstes)
Ein Python-Anfänger hat versucht, bei einem IT-Unternehmen zu praktizieren [Tag 2 Chatbot-Umfrage]
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren [Tag 1 Entwicklungsprozess]
9 Schritte, um in kürzester Zeit Experte für maschinelles Lernen zu werden [Völlig kostenlos]
Ich habe versucht, die beim maschinellen Lernen verwendeten Bewertungsindizes zu organisieren (Regressionsmodell).
Anfänger haben versucht, eine Cloud-native Webanwendung mit Datastore / GAE zu erstellen
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie eine JSON-Datei in Python
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
So erstellen Sie eine Rest-API in Django
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Einführung in das Buch "Erstellen einer profitablen KI mit Python", mit dem Sie in kürzester Zeit maschinelles Lernen erlernen können
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [1]. (Die Tiefe kann jetzt in PNG bearbeitet werden.)
[Keras] Ich habe versucht, das Problem der Klassifizierung des Donut-Typ-Bereichs durch maschinelles Lernen zu lösen. [Studie]
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ein Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren [Tag 3 in die Wolken ...]
So erstellen Sie schnell eine maschinelle Lernumgebung mit Jupyter Notebook mit UbuntuServer 16.04 LTS
Ich kann nicht schlafen, bis ich einen Server erstellt habe !! (Einführung in den Python-Server an einem Tag)
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Cross-Entropie zur Überprüfung in Coursera Machine Learning Woche 2 Aufgaben
Für mich als Django-Anfänger (4) - Erstellen Sie eine Memo-App-
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Einführung in das maschinelle Lernen mit Simple Perceptron
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
So erstellen Sie schnell eine maschinelle Lernumgebung mit Jupyter Notebook mit UbuntuServer 16.04 LTS mit anaconda
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
Ich habe versucht, "ein Herz, auch wenn es getrennt ist" mithilfe eines genetischen Algorithmus in Python zu automatisieren
Einführung in das maschinelle Lernen
Onkel SE mit verhärtetem Gehirn versuchte, maschinelles Lernen zu studieren
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Tag 68 [Einführung in Kaggle] Random Forest war einfach.
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Ich habe versucht, Tensorboard zu verwenden, ein Visualisierungstool für maschinelles Lernen
Ich habe versucht "Wie man eine Methode in Python dekoriert"