0

検証セットをnumpy配列として渡すことにより、skflowで検証モニターを使用しようとしています。

問題を再現するための簡単なコードを次に示します (Ubuntu/Linux 64 ビット、GPU 対応、Python 2.7 用に提供されたバイナリからテンソルフローをインストールしました)。

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)

コードは実行されますが、最初の検証ステップのみが適切に実行されます。その後、トレーニングが実際にうまくいっている場合でも、検証は常に同じ値を返します。これは、最後にテスト セットで評価を実行することで確認できます。検証ステップごとに、次のメッセージも表示されます。

INFO:tensorflow:Input iterator is exhausted. 

どんな助けでも大歓迎です!ありがとう、デビッド

4

2 に答える 2

0

追加することでこれを解決できました: config=tf.contrib.learn.RunConfig(save_checkpoints_secs=1) 呼び出しにDNNRegressor

于 2016-07-26T12:27:38.620 に答える