Tensorflow kann ein wenig kompliziert für jemanden neu zu Maschine lernen und Python sein. Mein Rat ist, durch die ausgezeichneten Notebook-Tutorials zu gehen, die auf Tensorflow-Sites existieren und anfangen, die Abstraktion zu verstehen.
Aber vorher würde ich Python mit numpy (und manchmal scipy) verwenden, um grundlegende Maschinenmethoden wie Stochastic Gradient Descent zu implementieren, nur um sicherzustellen, dass Sie verstehen, wie die Algorithmen funktionieren. Dann implementieren Sie eine einfache logistische Regression.
Warum also bitte ich Sie, all das zu tun? Nun, denn sobald Sie einen guten Griff darüber haben, wie man mit dem maschinellen Lernalgorithmus arbeitet und wie langwierig es ist, die Gradienten zu finden, werden Sie verstehen, warum die Tensorflow-Abstraktion nützlich ist.
Ich werde Ihnen einige einfache Beispiele zu MNIST geben.
from sklearn.datasets import load_digits
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
mnist = load_digits(2)
print("y [shape: {}] {}] : {}".format(y.shape,y[:10]))
print("x [shape: {}] {}]".format(x.shape)
Was ich im wesentlichen oben getan habe, ist Last zwei Ziffern aus der MNIST Datensatz (0 und 1) und zeigt die Anordnung für den Vektor Y und Matrix (x). Wenn Sie sehen wollen, wie die Bilder aussehen können Sie plt.imshow(X[0].reshape([8,8]))
Der nächste Schritt ist unser Platzhalter beginnen zu definieren und Variablen
input_x = tf.placeholder(tf.float32,shape=[None,X.shape[1]], name = "input_x")
input_y = tf.placeholder(tf.float32,shape=[None,],name = "labels")
weights = tf.Variable(initial_value = tf.zeros(shape=[X.shape[1],1]), name="weights")
b = tf.Variable(initial_value=0.0, name = "bias")
Wir hier getan haben, ist zwei Platzhalter in tensorflow definiert und haben gesagt, was die Variablen erwarten sollte als Eingabe. Ich habe dem Platzhalter auch einen Namen zum Debuggen gegeben.
prediction_y = tf.squeeze(tf.nn.sigmoid(tf.add(tf.matmul(input_x,weights),tf.cast(b,tf.float32))))
loss = tf.losses.log_loss(input_y,prediction_y)
optimizer = tf.train.Adamoptimizer(0.001).minimize(loss)
Da gehen Sie, das ist eine logistische Regression im Tensorflow. Was der letzte Block tut, ist, die Aktivierungsfunktion auf unsere Eingabevektoren anzuwenden, definiert die Verlustfunktion und definiert dann einen Optimierer für die Verlustfunktion.
Der letzte Schritt ist es zu starten.
from sklearn.metrics import roc_auc_score
s.run(tf.global_variables_initializer())
for i in range(10):
s.run(optimizer,{input_X:X_train, input_y: y_train})
loss_i = s.run(loss, {input_x:x_train,input_y:y_train})
print("loss at iteration {}: {}".format(i, loss_i))
Das ist im Wesentlichen, wie Sie Ihre Daten durch Tensorflow ausführen. Dieser Code kann Tippfehler enthalten, ich habe kein Python auf diesem Computer, also schreibe ich basierend auf Speicher. Aber die Grundidee ist da. Hoffe das hilft.
Edit: Auch seit Sie am besten gefragt, um Bilddaten zu trainieren. Meine Antwort an Sie wäre, dass es kein "Bestes" gibt. Das Erstellen eines CNN ist ein typischer Ansatz, den Sie möglicherweise unter Verwendung einer großen Anzahl klassifizierter Bilder ausprobieren möchten. Zuvor verwendeten die Leute auch relativ gut Unterstützungsvektoren zum Klassifizieren von Bildern.