小编fir*_*aus的帖子

jupyter notebooks 与命令行中 tf 的性能

我注意到从 jupyter notebook 内部运行 tensorflow 代码时的性能(速度)差异非常显着,而不是从命令行作为脚本运行它。

例如,下面是运行 MNIST CNN 教程的结果(https://www.tensorflow.org/code/tensorflow/examples/tutorials/mnist/fully_connected_feed.py

设置:

具有 32 个 Xeon-CPUS、62GB 内存、4 个 K520 GPUS(4GB 内存)的 AWS 实例

Linux:3.13.0-79 Ubuntu

Tensorflow:0.10.0rc0(从支持 GPU 的来源构建)

Python:3.5.2 |Anaconda 自定义(64 位)|

CUDA 库:libcublas.so.7.5、libcudnn.so.5、libcufft.so.7.5、libcuda.so.1、libcurand.so.7.5

训练步数:2000

Jupyter 笔记本执行时间:

这并没有包括时间的进口和加载数据集-只是训练阶段

CPU times: user 8min 58s, sys: 0 ns, total: 8min 58s Wall time: 8min 20s

命令行执行:

这是执行完整脚本的时间。

real 0m18.803s user 0m11.326s sys 0m13.200s

在这两种情况下都使用 GPU,但利用率更高(命令行训练阶段通常为 35%,而笔记本版本为 2-3%)。我什至尝试将其手动放置在不同的 GPU 上,但这对笔记本执行时间没有太大影响。

关于为什么会这样的任何想法/建议?

jupyter tensorflow jupyter-notebook

5
推荐指数
1
解决办法
2238
查看次数

在tensorflow中更新变量值

我有一个关于通过tensorflow python api更新张量值的基本问题.

考虑代码段:

x = tf.placeholder(shape=(None,10), ... )
y = tf.placeholder(shape=(None,), ... )
W = tf.Variable( randn(10,10), dtype=tf.float32 )
yhat = tf.matmul(x, W)
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我想实现某种迭代更新W值的算法(例如一些优化算法).这将包括以下步骤:

for i in range(max_its):
     resid = y_hat - y
     W = f(W , resid) # some update 
Run Code Online (Sandbox Code Playgroud)

这里的问题是W在LHS上是一个新的张量,而不是W用于yhat = tf.matmul(x, W)!也就是说,创建了一个新变量,并且W我的"模型"中使用的值不会更新.

现在解决这个问题的方法就是这样

 for i in range(max_its):
     resid = y_hat - y
     W = f(W , resid) # some update 
     yhat = tf.matmul( x, W)
Run Code Online (Sandbox Code Playgroud)

这导致为我的循环的每次迭代创建一个新的"模型"!

是否有更好的方法来实现这个(在python中)而不为循环的每次迭代创建一大堆新模型 - …

tensorflow

4
推荐指数
1
解决办法
7363
查看次数

在 cython 中排序

我是 cython 的新手,我正在尝试编写一个需要重复对部分排序数组进行排序的算法。看起来python的标准排序(timsort?)对此非常有用,但我还没有弄清楚如何从cythonized函数内部调用这个函数。

也就是说,我想做类似的事情:

cdef void myfunc(double* y) nogil:
    double *y_sort = sort(y)
Run Code Online (Sandbox Code Playgroud)

任何有关如何执行此操作的指示将不胜感激。

python cython

2
推荐指数
1
解决办法
2347
查看次数

标签 统计

tensorflow ×2

cython ×1

jupyter ×1

jupyter-notebook ×1

python ×1