2016-08-05 16 views
0

Ich bin begeistert von dem neuen Modell (d. H. Wide_n_deep learning) von Google und Tensorflow. Also versuche ich damit zu spielen, indem ich the tutorial example ausführen.Tensorflow Wide & Deep Tutorial Beispiel mit Batch

Als ein häufiger Trick beim maschinellen Lernen ist Batch-Lernen wichtig, wenn der gesamte Trainingsdatensatz groß ist. Also versuche ich, das wide_n_deep Lernen Tutorial Beispiel zur Verfügung gestellt zu modifizieren Batch Lernen zu erhalten, wie folgt:

index_in_epoch = 0 
num_examples = df_train.shape[0] 
for i in xrange(FLAGS.train_steps): 
    startTime = datetime.now() 
    print("start step %i" %i) 
    start = index_in_epoch 
    index_in_epoch += batch_size 
    if index_in_epoch > num_examples: 
     if start < num_examples: 
      m.fit(input_fn=lambda: input_fn(df_train[start:num_examples], steps=1) 
     df_train.reindex(np.random.permutation(df_train.index) 
     start = 0 
     index_in_epoch = batch_size 
    if i%5 == 1: 
     results = m.evaluate(input_fn=lambda: input_fn(df_test), steps = 1) 
     for key in sorted(results): 
      print("%s: %s %(key, results[key])) 
    end = index_in_epoch 
    m.fit(input_fn=lambda: input_fn(df_train[start:end], steps=1) 

Einfach gesagt, iterieren ich die gesamte Trainingsdatensatz Charge für Charge, und für jede Charge, ich nenne das „fit "Funktion, um das Modell neu zu trainieren.

Das Problem dieser naiven Strategie ist, dass die Verarbeitungszeit zu langsam ist (zum Beispiel wollen wir einen 4-Millionen-Datensatz 100-mal durchlaufen, mit einer Stapelgröße von 100k, der Trainings- und Auswertungszeit) wäre ungefähr 1 Woche). Also bezweifle ich wirklich, dass ich das Batch-Lernen richtig benutze.

Ich würde schätzen, wenn irgendein Talent Ihre Erfahrung teilen kann, um das Stapellernen beim Spielen mit dem wide_n_deep Lernmodell zu behandeln.

+0

Diese Trainingszeiten sind nicht ungewöhnlich. Imagenet dauert ca. 2 Wochen. –

Antwort

0

Jeder fit/evaluate-Aufruf erstellt ein Diagramm und eine Sitzung und führt den Vorgang aus. Wenn Sie das in der Schleife tun, wird es langsam sein. Um es schneller zu machen, müssen Sie eine input_fn bereitstellen, die Chargen für Charge Tensoren genannt werden. Wenn Sie Daten von einem Datenrahmen lesen, können Sie to_feature_columns_and_input_fn verwenden. Wenn Sie Daten aus einer Datei lesen, die tf.Example enthält, können Sie etwas wie read_batch_examples in Ihrem input_fn verwenden.

+0

Danke für Ihre Antwort! Als Anfänger zu Tensorflow kann ich den Grund verstehen, warum mein Ansatz, Chargen zu behandeln, langsam ist, nach dem Lesen Ihrer Kommentare. Es wäre hilfreicher, wenn Sie ein konkreteres Beispiel zum stapelweisen Lesen Ihres Vorschlags geben könnten. Danke für Ihre Hilfe. –