2017-11-30 23 views
2

tensorflow.estimator.DNNRegressor 모델을 학습 할 때 로그에 출력되는 모든 단계의 손실 값을 캡처하고 싶습니다.TensorFlow DNNRegressor 교육 회귀 분석기에서 손실 값 검색

사소한 넌센스 예 주어 :

In [1]: import pandas as pd 
In [2]: import numpy as np 
In [3]: import tensorflow as tf 
In [4]: X = pd.DataFrame({'X1':np.arange(1,10), 'X2':np.arange(11,20)}) 
In [5]: X 
Out[5]: 
    X1 X2 
0 1 11 
1 2 12 
2 3 13 
3 4 14 
4 5 15 
5 6 16 
6 7 17 
7 8 18 
8 9 19 

In [6]: y = pd.Series(np.arange(1,10)/2) 
In [7]: feature_cols = [tf.feature_column.numeric_column(col) 
         for col in X.columns] 

In [8]: regressor = 
tf.estimator.DNNRegressor(feature_columns=feature_cols, 
          hidden_units=[3,3], 
          model_dir='mymodel') 
INFO:tensorflow:Using default config. 
INFO:tensorflow:Using config: {'_tf_random_seed': 1, 
'_save_checkpoints_secs': 600, '_log_step_count_steps': 100, 
'_keep_checkpoint_max': 5, '_save_checkpoints_steps': None, 
'_session_config': None, '_model_dir': 'mymodel', 
'_keep_checkpoint_every_n_hours': 10000, '_save_summary_steps': 100} 

In [9]: regressor.train(
      input_fn=tf.estimator.inputs.pandas_input_fn(
            x=X, 
            y=y, 
            num_epochs=None, 
            shuffle=True), 
            steps=1000) 
INFO:tensorflow:Create CheckpointSaverHook. 
INFO:tensorflow:Saving checkpoints for 1 into mymodel/model.ckpt. 
INFO:tensorflow:step = 1, loss = 1090.0 
INFO:tensorflow:global_step/sec: 685.57 
INFO:tensorflow:step = 101, loss = 580.524 (0.146 sec) 
INFO:tensorflow:global_step/sec: 807.454 
INFO:tensorflow:step = 201, loss = 423.964 (0.124 sec) 
INFO:tensorflow:global_step/sec: 875.857 
INFO:tensorflow:step = 301, loss = 353.421 (0.114 sec) 
INFO:tensorflow:global_step/sec: 788.649 
INFO:tensorflow:step = 401, loss = 297.249 (0.127 sec) 
INFO:tensorflow:global_step/sec: 649.258 
INFO:tensorflow:step = 501, loss = 254.237 (0.154 sec) 
INFO:tensorflow:global_step/sec: 803.059 
INFO:tensorflow:step = 601, loss = 303.544 (0.125 sec) 
INFO:tensorflow:global_step/sec: 674.359 
INFO:tensorflow:step = 701, loss = 234.27 (0.148 sec) 
INFO:tensorflow:global_step/sec: 818.35 
INFO:tensorflow:step = 801, loss = 259.353 (0.122 sec) 
INFO:tensorflow:global_step/sec: 672.83 
INFO:tensorflow:step = 901, loss = 208.319 (0.149 sec) 
INFO:tensorflow:Saving checkpoints for 1000 into mymodel/model.ckpt. 
INFO:tensorflow:Loss for final step: 200.45. 
Out[9]: <tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1076d5470> 

그래서, 상기 출력 단계를 캡쳐하고자에서 = N, 손실 = 값 그래서 플롯하고, 그렇지 않으면 상기 그것을 분석.

나는 캡처하고 evaluate() 함수에서 반환 된 손실 함수 값을 플롯 할 수있는 방법을 찾았어요, 여기에 어떤 도움

답변

0

확인을 감사합니다, 그래서 반드시 훈련 손실 값을 검색 할 수있는 방법을 알아낼 수 없습니다 않았지만 꽤 많이 내게 내가 내 데이터를 피팅하는 경우 결정하는 데 필요한 정보를 가져옵니다.

위의 사소한 예와 일관되게 유지하면 다음과 같이됩니다.

In [1]: import tensorflow as tf 
In [2]: from sklearn.model_selection import train_test_split 
In [3]: import pandas as pd 
In [4]: import numpy as np 
In [5]: X = pd.DataFrame({'X1':np.arange(1,10), 'X2':np.arange(11,20)}) 
In [6]: y = pd.Series(np.arange(1,10)/2) 
In [7]: X_train, X_validate, y_train, y_validate = train_test_split(X, y, test_size=0.2, random_state=23) 
In [8]: feature_cols = [tf.feature_column.numeric_column(col) 
...:     for col in X.columns] 
...: 
In [9]: regressor = tf.estimator.DNNRegressor(feature_columns=feature_cols, 
...:          hidden_units=[3,3], 
...:          model_dir='fake_model') 
In [10]: validation_losses = [] 
In [11]: for _ in range(10): 
...:  regressor.train(input_fn=tf.estimator.inputs.pandas_input_fn(
        x=X_train, 
        y=y_train, 
        num_epochs=None, 
        shuffle=True), steps=10) 
...:  validation_losses.append(regressor.evaluate(
      input_fn=tf.estimator.inputs.pandas_input_fn(
       x=X_validate, 
       y=y_validate, 
       num_epochs=1, 
       shuffle=False))) 
In [12]: import matplotlib.pyplot as plt 
In [13]: losses = [l['loss'] for l in validation_losses] 
In [14]: steps = [s for s in range(10)] 
In [15]: plt.scatter(x=steps, y=losses) 
Out[15]: <matplotlib.collections.PathCollection at 0x1114e7048> 
In [16]: plt.show() 

enter image description here