Begeisterung als Ingenieur Ich denke, ich kann etwas Erstaunliches tun! Mit der Unterstützung meines Chefs Durchsuchen Sie tiefe Studienbücher und Qiita-Artikel. Wir stellen vor: TensorFlow und Chainer. Sammeln Sie Tugend mit der Kopie des Tutorials Die für das Spiel verwendete GPU war auch unter Lerngründen voll funktionsfähig ...
Accuracy 99.23%
Diesmal ein Ingenieur, der mit der Implementierung einer Engine zufrieden war, die MNIST und IRIS mit mehr als 99% identifiziert ** Eine Geschichte, um MNIST zu kennen, um aus MNIST herauszukommen **
28 Zeilen und 28 Spalten Bild → Richtig, aber jetzt nicht da. Als Datensatz 70.000 Zeilen und 784 Spalten, 70000 ist die Anzahl der Abtastwerte, 784 ist die Anzahl der Dimensionen, wenn 28 * 28 in einen Vektor umgewandelt wird. Wenn Sie der Meinung sind, dass die Gesamtzahl der Daten, die Sie in einer Zeile analysieren möchten, und alle Daten, die Sie in einer Spalte analysieren möchten, bis zum nächsten Schritt (RNN oder so?) Kein Problem besteht, können SupportVectorMachine und K-means auf dieselbe Weise verwendet werden.
Dies ist auch wichtig, und beim Sammeln von Lehrerdaten in der Praxis ist es einfach, eine große Menge von 1 und eine große Menge von 2 vorzubereiten. Sie müssen es richtig mischen, bevor Sie anfangen zu lernen. Versuchen Sie, nur die Zahlen von 0 bis 8 zu lernen, um festzustellen, ob Sie 9 identifizieren können. Ich bin mir sicher, dass es viele Nullen und Vierer geben wird.
Was für ein Ideal. Beim Versuch, Daten in der Praxis zu sammeln, ist manchmal "A" oder "-" enthalten, obwohl es sich aufgrund von Problemen um einen numerischen Datensatz handelt. Die Daten, die im Voraus richtig sortiert und gekennzeichnet werden können, sind äußerst wertvoll.
Sie können sie auch durch Cloud-Finanzierung kennzeichnen lassen. Verwenden Sie sie daher nach Bedarf. Die Zeichensammlung mit Captcha war auch eine Zeit lang ein Thema. Luis von Arn "Groß angelegte Zusammenarbeit über das Netz" https://www.youtube.com/watch?v=-Ht4qiDRZE8
Rund 200 MB. Wenn Sie es im Speicher eines modernen PCs bereitstellen möchten, ist es genau richtig. Selbst wenn Sie es implementieren, während Sie Qiita in Firefox ansehen und plötzlich ausführen, können Sie das Verhalten mit realistischer Speichernutzung überprüfen. Darüber hinaus kann die Identifizierungsleistung, die mehr als genug ist, um erstaunlich zu sein, selbst mit einem gewöhnlichen dreischichtigen Perzeptron realisiert werden.
Es ist keine große und spärliche Prozession wie der Verarbeitungsbereich für natürliche Sprachen, sie ist nicht unterschiedlich lang und kann nicht wie eine Stimme übersehen werden, und es ist nicht notwendig, mit Farben und drei Farben gut umzugehen. Es ist wunderbar, dass Sie anhand des Putt beurteilen können, auch wenn Sie mehrere Ergebnisse erzielen. Sie können verstehen, welche Funktionen in der mittleren Ebene hervorragend sind.
Was möchten Sie mit MNIST tun, nachdem Sie MNIST gelobt haben? Denk an. Dieses Mal besteht der Zweck darin, die Form der Ausgabedaten und die Form des Etiketts zu verstehen, das an die Lehrerdaten angehängt ist.
1,2,3,4,5,6,7,8,9,0
Lösche einen von ihnen. Welche Art von Ausdruck würden Sie gerne sehen? Beispiel 1. Ausgabe in 1 Dimension: 6 => 5,5 oder mehr und 6,4 oder weniger 7 => 6,5 oder mehr und 7,4 oder weniger
Beispiel 2. Ausgabe in 10 Dimensionen: 6 => [0,0,0,0,0,1,0,0,0,0] 7 => [0,0,0,0,0,0,1,0,0,0] 8 => [0,0,0,0,0,0,0,1,0,0] In MNIST, einer Klassifizierung mit mehreren Klassen, gibt es in Beispiel 2 viele geeignete Tutorials. Wenn Sie hier einen Fehler machen, wählen Sie möglicherweise die falsche Fehlerfunktion aus. Es gibt eine Fehlerfunktion, die gute Arbeit leistet. Wenn dies jedoch nicht häufig vorkommt, müssen Sie möglicherweise die Bezeichnung der Lehrerdaten ändern ... Wenn Sie die Ausgabe dieses Bereichs nicht klarstellen, können Sie mit einer Klassifizierung und Regression in zwei Klassen usw. verwechselt werden.
WhatMnist.py
import pandas as pd
import numpy as np
# Chainer
import chainer
import chainer.functions as F
import chainer.links as L
from chainer import optimizers
from chainer import serializers, Variable
#Visualisierung(Jupyter Annahme)
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.cm as cm
WhatMnist.py
# http://deeplearning.net/data/mnist/mnist.pkl.gz
#Mit Tapple(train, valid, test)
# train -> (data, label)
# valid -> (data, label)Es ist zu nett und sogar die Validierungsdaten werden getrennt
# test -> (data, label)
#Lesen Sie Daten mit Pandas
mnist = pd.read_pickle('mnist.pkl')
http://deeplearning.net/tutorial/gettingstarted.html Klicken Sie hier für den Datensatz.
WhatMnist.py
if(0):
# Pandas +Für csv
mnist = pd.read_csv('mnist.csv')
# Numpy +Für csv
mnist = np.loadtxt('mnist.csv')
#Trennung von Beschriftungsspalten(Angenommen, die erste Zeile ist das Etikett)
mnist_data, mnist_label = np.split(mnist, [1], axis=1)
#Aufteilung zwischen Studien- und Testlinien
x_train,x_test = np.split(mnist_data, [50000])
y_train,y_test = np.split(mnist_label, [50000])
WhatMnist.py
print('##Dimension und Menge')
print("train.data:{0}, train.label:{1}".format(mnist[0][0].shape, mnist[0][1].shape))
print("valid.data:{0}, valid.label:{1}".format(mnist[1][0].shape, mnist[1][1].shape))
print("test.data:{0}, test.label:{1}".format(mnist[2][0].shape, mnist[2][1].shape))
print('##Wertebereich und Einheit')
print("train.data.max:{0}, train.data.min:{1}".format(np.max(mnist[0][0]), np.min(mnist[0][0])))
print("train.label.max:{0}, train.label.min:{1}".format(np.max(mnist[0][1]), np.min(mnist[0][1])))
print('##Anordnung und Ausgabemethode')
print("head -n 30 label: {0}".format(mnist[0][1][:30]))
print('##Eingabe Methode(Sofort lesen und np.Ich stecke im Array fest)')
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)
print('##Bestätigungsmethode')
print('Ich habe versucht, einen geeigneten als Vertreter anzuzeigen.')
ax1.imshow(mnist[0][0][40].reshape((28,28)), cmap = cm.Greys_r)
print('##Art und Natur')
print('Hier habe ich versucht, die Häufigkeit jeder Klasse mit einem Histogramm zu visualisieren.')
ax2.hist(mnist[0][1], bins=range(11), alpha=0.9, color='b', normed=True)
Dimension und Menge
train.data:(50000, 784), train.label:(50000,) valid.data:(10000, 784), valid.label:(10000,) test.data:(10000, 784), test.label:(10000,)
Wertebereich und Einheiten
train.data.max:0.99609375, train.data.min:0.0 train.label.max:9, train.label.min:0
Sortier- und Ausgabemethode
head -n 30 label: [5 0 4 1 9 2 1 3 1 4 3 5 3 6 1 7 2 8 6 9 4 0 9 1 1 2 4 3 2 7]
Eingabemethode (sofort lesen und in np.array eintauchen)
So überprüfen Sie
Ich habe versucht, einen geeigneten als Vertreter anzuzeigen.
Typ und Art
Hier habe ich versucht, die Häufigkeit jeder Klasse mit einem Histogramm zu visualisieren. (array([ 0.09864, 0.11356, 0.09936, 0.10202, 0.09718, 0.09012, 0.09902, 0.1035 , 0.09684, 0.09976]), array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
In Chainer werden Daten als float32, int32 behandelt und als Array (auf der CPU) behandelt.
WhatMnist.py
x_train = np.array(mnist[0][0], dtype=np.float32)
y_train = np.array(mnist[0][1], dtype=np.int32)
x_test = np.array(mnist[2][0], dtype=np.float32)
y_test = np.array(mnist[2][1], dtype=np.int32)
print('x_train:' + str(x_train.shape))
print('y_train:' + str(y_train.shape))
print('x_test:' + str(x_test.shape))
print('y_test:' + str(y_test.shape))
x_train:(50000, 784) y_train:(50000,) x_test:(10000, 784) y_test:(10000,)
WhatMnist.py
#Prädiktorklasse
class MLP(chainer.Chain):
def __init__(self):
super(MLP, self).__init__(
l1=L.Linear(784, 100),
l2=L.Linear(100, 100),
l3=L.Linear(100, 10),
)
def __call__(self, x):
h1 = F.relu(self.l1(x))
h2 = F.relu(self.l2(h1))
y = self.l3(h2)
return y
#Verlust und Genauigkeit berechnen
class Classifier(chainer.Chain):
def __init__(self, predictor):
super(Classifier, self).__init__(predictor=predictor)
def __call__(self, x, t):
y = self.predictor(x)
self.loss = F.softmax_cross_entropy(y, t)
self.accuracy = F.accuracy(y, t)
return self.loss
model = Classifier(MLP())
optimizer = optimizers.SGD()
optimizer.setup(model)
batchsize = 100
datasize = 50000
for epoch in range(20):
print('epoch %d' % epoch)
indexes = np.random.permutation(datasize)
for i in range(0, datasize, batchsize):
x = Variable(x_train[indexes[i : i + batchsize]])
t = Variable(y_train[indexes[i : i + batchsize]])
optimizer.update(model, x, t)
(Ich persönlich halte dieses Gerät für wichtig.)
WhatMnist.py
n = 10
x = Variable(x_test[n:n+1])
v = model.predictor(x)
plt.imshow(x_test[n:n+1].reshape((28,28)), cmap = cm.Greys_r)
print(np.argmax(v.data))
0
Vor langer Zeit, als die Welle des tiefen Lernens kam. Wenn ich als Doktorand von kleinen Fischen im Detail maschinelles Lernen machte, konzentrierte ich mich eher auf Algorithmen und Codierung und verlor oft die Natur der Daten selbst aus den Augen. Mit zunehmender Menge wird es notwendig, Dinge zu beobachten, die schwer zu beobachten sind, und das Verständnis der Eigenschaften wirkt sich stark auf die Leistung aus. ** Wenn Sie sich verlaufen, sehen Sie sich die Daten an. ** ** **
Recommended Posts