Ich bin daran interessiert, ein konvolutionelles neuronales Netzmodell auf meinen eigenen Bildern zu trainieren und auszuwerten. Ich möchte das Modul tf.layers
für meine Modelldefinition zusammen mit einem Objekt verwenden, um das Modell mit den Methoden fit()
bzw. evaluate()
zu trainieren und zu bewerten.TensorFlow: Train-Modell für einen benutzerdefinierten Bilddatensatz
Here ist das Tutorial, dem ich gefolgt bin, das hilfreich ist, um das tf.layers
Modul und die tf.learn.Estimator
Klasse zur Schau zu stellen. Das von ihm verwendete Dataset (MNIST) wird jedoch einfach importiert und geladen (als NumPy-Arrays). Siehe die folgende Hauptfunktion aus dem Tutorial-Skript:
def main(unused_argv):
# Load training and eval data
mnist = learn.datasets.load_dataset("mnist")
train_data = mnist.train.images # Returns np.array
train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
eval_data = mnist.test.images # Returns np.array
eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)
# Create the Estimator
mnist_classifier = learn.Estimator(
model_fn=cnn_model_fn, model_dir="/tmp/mnist_convnet_model")
# Set up logging for predictions
# Log the values in the "Softmax" tensor with label "probabilities"
tensors_to_log = {"probabilities": "softmax_tensor"}
logging_hook = tf.train.LoggingTensorHook(
tensors=tensors_to_log, every_n_iter=50)
# Train the model
mnist_classifier.fit(
x=train_data,
y=train_labels,
batch_size=100,
steps=20000,
monitors=[logging_hook])
# Configure the accuracy metric for evaluation
metrics = {
"accuracy":
learn.MetricSpec(
metric_fn=tf.metrics.accuracy, prediction_key="classes"),
}
# Evaluate the model and print results
eval_results = mnist_classifier.evaluate(
x=eval_data, y=eval_labels, metrics=metrics)
print(eval_results)
Voll Code here
Ich habe meine eigenen Bilder, die ich in beiden jpg
Format innerhalb einer bestimmten Verzeichnisstruktur haben:
data
train
classA
1.jpg
2.jpg
...
classB
3.jpg
4.jpg
...
...
validate
classA
5.jpg
6.jpg
...
classB
...
...
Und ich habe auch meine Bildverzeichnisse in TFRecord-Format mit einer TFRecord-Datei für train
und eine für 012 konvertiert. Ich folgte this Tutorial, das das build_image_data.py Skript aus dem Inception-Modell verwendet, das mit TensorFlow als Blackbox kommt, die diese TFRecord-Dateien ausgibt. Ich gebe zu, dass ich den Wagen vielleicht etwas vor das Pferd gestellt habe, indem ich diese erstellt habe, aber ich dachte, dass es vielleicht einen Weg gibt, diese als Eingaben für die tf.learn.Estimator
fit()
und evaluate()
Methoden zu verwenden.
Fragen
Wie kann ich meine jpg
formatieren (oder TFRecord) Daten, so dass ich sie als Eingaben in das Estimator
Funktionen des Objekts nicht verwenden kann?
Ich gehe davon aus, dass ich meine Bilder und Etiketten zu NumPy-Arrays konvertieren muss, wie es im obigen Code zeigt, aber es ist nicht klar, wie die mnist.train.images
und mnist.train.validation
formatiert sind.
Hat jemand Erfahrung mit der Konvertierung von jpg
Dateien und Labels zu NumPy-Arrays, die diese Estimator
Klasse als Eingaben erwartet?
Jede Hilfe würde sehr geschätzt werden.
Ich weiß, die Frage nach Tensorflow ist (und ich versuche zu finden, wie dies in Tensorflow zu tun), aber diese ist sehr einfach in PyTorch zu tun: https://github.com/pytorch/vision#imagefolder – finbarr
Diese Antwort könnte für Sie nützlich sein: https://stackoverflow.com/questions/34340489/tensorflow-read-images-with- Etiketten – finbarr