Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何实现霍格威德!Tensorflow中的样式更新_Python_Tensorflow_Deep Learning - Fatal编程技术网

Python 如何实现霍格威德!Tensorflow中的样式更新

Python 如何实现霍格威德!Tensorflow中的样式更新,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我试图在Tensorflow中实现一个简单的hogwild概念证明。理想情况下,它将使用Python线程来执行更新。我已经完成了一个实现,它紧跟着TF网站上的专家教程Deep MNIST,除了Hogwild。可在以下位置获得实施: 代码的关键部分如下: def accuracy(session, graphs, data_iter, num_threads, train=False): num_total = 0 num_correct = 0 def proces

我试图在Tensorflow中实现一个简单的hogwild概念证明。理想情况下,它将使用Python线程来执行更新。我已经完成了一个实现,它紧跟着TF网站上的专家教程Deep MNIST,除了Hogwild。可在以下位置获得实施:

代码的关键部分如下:

def accuracy(session, graphs, data_iter, num_threads, train=False):
    num_total   = 0
    num_correct = 0

    def process_batch(batch_x, batch_y):
        nonlocal num_correct
        nonlocal num_total
        with graphs.lease() as g:
            input_placeholder, output_placeholder, \
            keep_prob_placeholder, train_step_f, num_correct_f, \
            no_op = g
            batch_num_correct, _ = session.run(
                [num_correct_f, train_step_f if train else no_op],
                {
                    input_placeholder:     batch_x,
                    output_placeholder:    batch_y,
                    keep_prob_placeholder: 0.5 if train else 1.0,
                })
            num_correct += batch_num_correct
            num_total   += len(batch_x)

    with BlockOnFullThreadPool(max_workers=num_threads, queue_size=num_threads // 2) as pool:
        for i, (batch_x, batch_y) in enumerate(data_iter):
            pool.submit(process_batch, batch_x, batch_y)
        pool.shutdown(wait=True)

    return float(num_correct) / float(num_total)
所以本质上我创建了
num_threads
tensorflow表达式集(在我的代码中,它们是命名不好的-图),其中变量被重用,优化器不使用锁定。现在,该实现具有所有期望的特性(并行化加速、收敛时的性能等),但每次我运行它时,在获得最佳性能后,它都会在第30纪元左右发生变化,这只是
num_threads=10
的情况,而不是
num_threads=1
(此处提供了针对
num_threads=10
的每个历元日志的培训/验证:)


有人知道是什么原因造成的吗?我遗漏了一些基本的东西吗?例如,每个图形都在单独的数组中计算梯度吗?

你创建多个图形是什么意思?你创建了多个
图形
对象吗?如果是,你如何让多个图形对象重用同一个变量对象?不,我只是cre在同一个图中吃了多个变量,我这边的措辞很糟糕,对不起。您是否检查了
num_线程
1和10的不同值的行为?“如果不收敛,请保持冷静并降低您的学习率。”:-)