【问题标题】:How to get the same initial results if seed is provided , without restarting the Ipython kernel in Tensorflow如果提供种子,如何在不重新启动 Tensorflow 中的 Ipython 内核的情况下获得相同的初始结果
【发布时间】:2016-10-28 03:41:02
【问题描述】:

我不确定这个问题是否符合 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() ,但这并没有对行为做出任何改变。

【问题讨论】:

    标签: ipython tensorflow deep-learning


    【解决方案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
    

    【讨论】:

    • 我问的不是保存变量。我要问的是,如何在不重新启动内核的情况下在 Ipython shell 中获得前 10 次迭代的相同结果,如果我在第一个单元格中运行 10 次迭代,然后在下一个单元格中运行第 11 次迭代,模型从哪里恢复这是第 10 次迭代。但是,如果在下一个单元中,如果我希望模型从相同的初始状态开始,我怎么能在不重新启动内核的情况下做到这一点。
    • 感谢您的帮助。但是,当我运行您提供的示例代码时,每次执行单元格时,值似乎都不同。可以请你检查一下吗?
    • 是的,我想是的。
    猜你喜欢
    • 2016-05-31
    • 2019-04-10
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多