如果提供了种子,如何获得相同的初始结果,而无需在Tensorflow中重新启动Ipython内核

时间:2016-10-28 03:41:02

标签: ipython tensorflow deep-learning

我不确定,这个问题是否符合Tensorflow设计的任何逻辑。这是代码

import numpy as np
import tensorflow as tf


np.random.seed(0)
tf.set_random_seed(0)

class Sample():


def __init__(self, hidden_dim = 50 , input_dim = 784):

    self.hidden_dim = hidden_dim
    self.input_dim = input_dim
    self.x = tf.placeholder(tf.float32, [None, self.input_dim])
    self._create_network()
    self.__minimize()
    self.sess = tf.InteractiveSession()
    init = tf.initialize_all_variables()
    self.sess.run(init)

def _create_network(self):

    self.W1 = tf.Variable(tf.random_normal([self.input_dim, self.hidden_dim]))
    self.W2 = tf.Variable(tf.random_normal([self.hidden_dim, self.input_dim]))

def __minimize(self):

    h1 = tf.matmul(self.x , self.W1)
    h2 = tf.matmul(h1, self.W2)
    reconstruction = tf.nn.sigmoid(h2)
    self.loss = tf.reduce_mean(tf.squared_difference(self.x , reconstruction))
    self.optimizer = \
        tf.train.AdamOptimizer(learning_rate=0.01).minimize(self.loss)

def partial_fit(self, X):

    cost , _ = self.sess.run([self.loss, self.optimizer] , feed_dict = {self.x: X})
    return cost

import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
n_samples = mnist.train.num_examples
ex_1 = mnist.train.next_batch(1)[0]

model = Sample()
for i in xrange(11):
    c = model.partial_fit(ex_1)
    print c

结果如下:

0.498799 0.469001 0.449659 0.436665 0.424995 0.414473 0.404129 0.394458 0.39165 0.38483 0.380042

使用种子0实现此结果,并且在重新启动内核时也是如此。但是假设,如果我运行10次迭代然后,如果我必须从头开始,我将如何在Ipython中执行它。因为,如果在10次左右的迭代后运行,模型将继续从剩余值开始。 我使用了tf.reset_default_graph(),但是没有对行为做任何改变。

1 个答案:

答案 0 :(得分:1)

请勿使用InterativeSession,而是使用普通Session

每次使用相同的种子创建一个新的会话,您将得到相同的结果。

graph = tf.Graph()
with graph.as_default():
    model = Sample()
with Session(graph=graph) as sess:
    np.random.seed(0)
    tf.set_random_seed(0)
    for i in xrange(11):
        c = model.partial_fit(ex_1)
        print c