2016-07-21 11 views
0

Ich versuche, einen Validierungsmonitor in skflow zu verwenden, indem ich meinen Validierungssatz als numpy-Array übergebe.Wie kann man Daten in einen Tensorflow-Lernvalidierungsmonitor eingeben?

Hier finden Sie einige einfache Code, um das Problem (I installiert tensorflow aus den bereitgestellten Binärdateien für Ubuntu/Linux 64-bit, GPU aktiviert, Python 2.7) zu reproduzieren:

import numpy as np 
from sklearn.cross_validation import train_test_split 
from tensorflow.contrib import learn 
import tensorflow as tf 
import logging 
logging.getLogger().setLevel(logging.INFO) 

#Some fake data 
N=200 
X=np.array(range(N),dtype=np.float32)/(N/10) 
X=X[:,np.newaxis] 
Y=np.sin(X.squeeze())+np.random.normal(0, 0.5, N) 

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, 
                train_size=0.8, 
                test_size=0.2) 

val_monitor = learn.monitors.ValidationMonitor(X_test, Y_test,early_stopping_rounds=200) 
reg=learn.DNNRegressor(hidden_units=[10,10],activation_fn=tf.tanh,model_dir="tmp/") 
reg.fit(X_train,Y_train,steps=5000,monitors=[val_monitor]) 
print "train error:", reg.evaluate(X_train, Y_train) 
print "test error:", reg.evaluate(X_test, Y_test) 

der Code ausgeführt wird, sondern nur die erste Der Validierungsschritt wird ordnungsgemäß durchgeführt. Die Validierung liefert dann immer den gleichen Wert, auch wenn das Training tatsächlich gut läuft. Dies kann überprüft werden, indem am Ende des Tests eine Auswertung durchgeführt wird. Die folgende Nachricht wird auch für jeden Überprüfungsschritt angezeigt.

INFO:tensorflow:Input iterator is exhausted. 

Jede Hilfe ist willkommen! Danke, David

+0

Wie sehen Ihre Daten aus? Sie müssen "Every_n_steps", "steps" und "batch_size" mehr Aufmerksamkeit schenken, wenn Sie es verwenden. –

+0

Ich habe jetzt meine Frage bearbeitet, um ein Beispiel zu geben. Ich kann ValidationMonitor nicht mit 'batch_size' und' steps' als Schlüsselwortargumenten aufrufen. Ich habe Tensorflow von den mitgelieferten Binaries für Ubuntu/Linux 64-Bit, GPU aktiviert, Python 2.7 installiert. Vielleicht wurde der Code für die Monitore kürzlich geändert? – dbikard

+0

Ja, es hat sich ziemlich verändert. Bitte versuchen Sie die neueste Version. –

Antwort

0

konnte ich dieses Problem zu lösen durch Zugabe: config=tf.contrib.learn.RunConfig(save_checkpoints_secs=1) zum DNNRegressor Anruf.

0

Verbesserung auf dbikard Lösung:

hinzufügen config=tf.contrib.learn.RunConfig(save_checkpoints_steps=val_monitor._every_n_steps) zum DNN Regressor stattdessen Anruf.

Dies spart Prüfpunkte, wenn sie benötigt werden (d. H. Jedes Mal, bevor der Monitor ausgelöst wird) und nicht nur einmal pro Sekunde.