2017-10-15 3 views
0

ich die Bilder lesen zu trainieren, die verwendet wird, um meine Klassifizierer in einem Dataset zu trainieren wie folgt:Wie den Klassifikator ernähren sich von Tensorflow

filename_strings = [] 
label_strings = [] 
for dirname, dirnames, filenames in os.walk('training'): 
    for filename in filenames: 
     filename_strings.append(dirname + '\\' + filename) 
     label_strings.append(dirname) 

filenames = tf.constant(filename_strings) 
labels = tf.constant(label_strings) 
dataset = tf.contrib.data.Dataset.from_tensor_slices((filenames, labels)) 
dataset_train = dataset.map(_parse_function) 

_parse_function:

# Reads an image from a file, decodes it into a dense tensor, and resizes it 
# to a fixed shape. 
def _parse_function(filename, label): 
    image_string = tf.read_file(filename) 
    image_decoded = tf.image.decode_png(image_string) 
    image_resized = tf.image.resize_images(image_decoded, [28, 28]) 
    return image_decoded, label 

Aber jetzt bin ich nicht in der Lage, den Zug Schritt .:

# Create the Estimator 
mnist_classifier = tf.estimator.Estimator(
model_fn=cnn_model_fn, model_dir="/model") 
# Set up logging for predictions 
tensors_to_log = {"probabilities": "softmax_tensor"} 
logging_hook = tf.train.LoggingTensorHook(
tensors=tensors_to_log, every_n_iter=50) 

# Train the model 
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x= {"x": dataset_train }, 
    y= dataset_train, 
    batch_size=100, 
    num_epochs=None, 
    shuffle=True) 
mnist_classifier.train(
    input_fn=train_input_fn, 
    steps=200, 
    hooks=[logging_hook]) 

ich versuche zu folgen diesem Tutorial A Guide to TF Layers: Building a Convolutional Neural Network aber mit meiner eigenen im einzuspeisen Alter eingestellt.

Kann ich den Datensatz nicht direkt zum Zuführen des Zugschritts verwenden? Ich meine, ich habe nur einen Tensor mit der Funktion und dem Label für jedes Bild.

+0

Für 'numpy_input_fn' Dataset erwartet wird in' numpy', so '_parse_function' müssen zurückkehren Bilder als numpy Arrays – Maxim

Antwort

0

Das Lernprogramm, auf das Sie verweisen, liest die Daten in ein numpliges Array (siehe) und übergibt die Eingabe mit tf.estimator.inputs.numpy_input_fn. Dies ist der einfachste Weg. Wenn Sie jedoch von Anfang an mit Tensoren arbeiten möchten, können Sie auch eine custom input function verwenden. Hier ist ein einfaches Beispiel:

def read_images(batch_size): 
    # A stub. Should read the next batch, shuffle it, etc 
    images = tf.zeros([batch_size, 28, 28, 1]) # 4-rank tensor 
    labels = tf.ones([batch_size])    # 1-rank tensor (not one-hot encoded) 
    return images, labels 

def simple_input(): 
    x, labels = read_images(batch_size=10) 
    return {"x": x}, labels 

tensors_to_log = {"probabilities": "softmax_tensor"} 
logging_hook = tf.train.LoggingTensorHook(tensors=tensors_to_log, every_n_iter=50) 

classifier.train(input_fn=simple_input, 
       steps=10, 
       hooks=[logging_hook]) 
Verwandte Themen