2016-12-24 127 views
2

我想学习与的张量流用于学习与TensorFlow高级API和无法获得可重复的结果的问题。张量流不能实现重复性

TensorFlow 0.12.0-RC0(CPU只) 蟒蛇3.5

import numpy as np 
import tensorflow as tf 
import os 
import shutil 
import random 

#print(tf.__version__) 
#0.12.0-rc0 

LOG_OUTPUT_DIR = "/home/tensorflow/model" 

def clear_logs(): 
    for root, dirs, files in os.walk(LOG_OUTPUT_DIR): 
     for f in files: 
      os.unlink(os.path.join(root, f)) 
     for d in dirs: 
      shutil.rmtree(os.path.join(root, d)) 


data = np.array(
    [ 
     [ 1 , 2 , 3 , 4 , 5 ], 
     [ 2 , 3 , 4 , 5 , 6 ], 
     [ 3 , 4 , 5 , 6 , 7 ], 
     [ 4 , 5 , 6 , 7 , 8 ], 
     [ 5 , 6 , 7 , 8 , 9 ], 
     [ 6 , 7 , 8 , 9 , 10 ], 
     [ 7 , 8 , 9 , 10 , 11 ], 
     [ 8 , 9 , 10 , 11 , 12 ], 
     [ 9 , 10 , 11 , 12 , 13 ], 
     [ 10 , 11 , 12 , 13 , 14 ], 
     [ 11 , 12 , 13 , 14 , 15 ], 
     [ 12 , 13 , 14 , 15 , 16 ], 
     [ 13 , 14 , 15 , 16 , 17 ], 
     [ 14 , 15 , 16 , 17 , 18 ], 
     [ 15 , 16 , 17 , 18 , 19 ], 
     [ 16 , 17 , 18 , 19 , 20 ], 
     [ 17 , 18 , 19 , 20 , 21 ], 
     [ 18 , 19 , 20 , 21 , 22 ], 
     [ 19 , 20 , 21 , 22 , 23 ] 
    ]) 

target = np.array([ 
    [ 6 ], 
    [ 7 ], 
    [ 8 ], 
    [ 9 ], 
    [ 10 ], 
    [ 11 ], 
    [ 12 ], 
    [ 13 ], 
    [ 14 ], 
    [ 15 ], 
    [ 16 ], 
    [ 17 ], 
    [ 18 ], 
    [ 19 ], 
    [ 20 ], 
    [ 21 ], 
    [ 22 ], 
    [ 23 ], 
    [ 24 ] 
    ]) 

#out of range data 
data_out = np.array([[ 20 , 21 , 22 , 23 , 24 ]]) 

INPUT_COUNT = data.shape[1] 
clear_logs() 


MY_SEED = 1234 
tf.set_random_seed(MY_SEED) 
tf.logging.set_verbosity(tf.logging.ERROR) 

feature_columns = [tf.contrib.layers.real_valued_column("", dimension=INPUT_COUNT)] 
HIDDEN_UNITS = [INPUT_COUNT * 2, INPUT_COUNT * 4, INPUT_COUNT * 2] 

with tf.Graph().as_default() as g: 
    random.seed(MY_SEED) 
    g.seed = MY_SEED 

    regressor = tf.contrib.learn.DNNRegressor(
      feature_columns=feature_columns, hidden_units=HIDDEN_UNITS, 
      model_dir=LOG_OUTPUT_DIR, 
      config=tf.contrib.learn.RunConfig(tf_random_seed=MY_SEED)) 

    regressor.fit(data, target, steps=300, batch_size=data.shape[0]) 

    accuracy_score = regressor.evaluate(x=data,y=target)["loss"] 
    print('Accuracy: {0:f}'.format(accuracy_score)) 

    y = regressor.predict(data_out, as_iterable=False) 
    final_cost = np.sqrt(np.mean((y-[25])**2)) 
    print('#RMSE:', final_cost, '; Result:', y) 

正如你看到的,我试图把随机种子MY_SEED只要有可能,但结果是从运行到运行不同。

我错过了什么?

+0

我在1.0版本中试过,每次运行时都会得到完全相同的输出。 – keveman

回答

1

Per keveman的评论,这似乎是(现在非常陈旧)0.12-RC版本候选版本中的一个错误。有一些与确定性随机种子设置有关的bug已经修复。