小编Slo*_*oke的帖子

Tensorflow服务器:我不想为每个会话初始化全局变量

EDIT2:下面的Github链接包含从进程调用TF模型的问题的可能解决方案.它们包括急切执行和专用服务器进程,通过http请求提供TF模型预测.我想知道是否使用自定义服务器和请求我赢得任何时间相比每次初始化全局变量和调用tf.train.Server,但它似乎更优雅的方式.

我将调查内存泄漏,如果它消失了,请关闭此问题.

编辑:添加简单的可重现的问题示例:

https://github.com/hcl14/Tensorflow-server-launched-from-child-process


背景:我正在运行Tensorflow服务器,并从"分叉"进程连接到它.动态创建(和销毁)进程对我来说至关重要 - 我在那里移动了高负载的代码部分,因为奇怪的内存泄漏,Python剖析器看不到(线程无法解决问题).因此,我希望快速初始化流程并立即开始工作.仅当进程被销毁时才释放内存.

做实验,我发现了一个解决方案,当加载的模型和图形被保存到全局变量中,然后由子进程(默认使用'fork'模式)进行,然后调用服务器.

问题:对我来说奇怪的是,在加载keras模型之后,我无法锁定我不希望修改的图形,并且tf.global_variables_initializer()每次在子进程中打开新会话时我都需要运行.但是,在没有任何会话创建的主流程中运行虚拟运行Ok.我知道在这种情况下,tensorflow使用默认会话,但是图形上的所有变量都应该在模型运行后初始化,所以我希望新会话能够使用先前定义的图形工作.

因此,我认为修改模型会使Python对子进程('fork'模式)大量腌制,从而产生计算和内存开销.

请原谅我的很多代码.我使用的模型是遗留和黑盒子,所以我的问题可能与它有关.Tensorflow版本是1.2(我无法升级,模型不兼容),Python 3.6.5.

此外,也许我的解决方案效率低下而且效果更好,我将非常感谢您的建议.

我的设置如下:

1.Tensorflow服务器在主进程中启动:

初始化服务器:

def start_tf_server():
    import tensorflow as tf
    cluster = tf.train.ClusterSpec({"local": [tf_server_address]})
    server = tf.train.Server(cluster, job_name="local", task_index=0)    
    server.join() # block process from exiting
Run Code Online (Sandbox Code Playgroud)

在主要过程中:

p = multiprocessing.Process(target=start_tf_server)
p.daemon=True
p.start() # this process never ends, unless tf server crashes

# WARNING! Graph initialization must be made only after Tf server start!
# Otherwise everything will …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

15
推荐指数
1
解决办法
811
查看次数

如何创建一个类对象数组,其构造函数需要很少的参数?

我已阅读有关解决方案const A a[3] = { {0,0}, {1,1}, {2,2} },但在我的程序const中无法使用:

class Paper: public PaperQueue{  
  ...
  protected:
    typedef int (Utils::*funcPtr) (int, int); //I use external function there
    funcPtr p;                               
    Utils* fptr; 
  public:
    int pricefunc(){     
      addprice = (fptr->*p) (t,price);
    }

    Paper(int n, unsigned int pr):PaperQueue(n){         
       ...
       p=&Utils::commonpricefunc;    
    }
    void Put(int a){ 
       ...
    }
  ...
}    

class Bank{ 
  ...
  void Buy(Paper &p){
   (/*this function modifies many parameters in 'p'*/)
  ...
  }
  ...
}

int main(){
Bank B;    
int pn=5;
/* …
Run Code Online (Sandbox Code Playgroud)

c++ arrays parameters constructor class

7
推荐指数
1
解决办法
1万
查看次数

R:撤消排序/取消排序/切换回初始顺序

假设我有一个向量

test<-c("a","b","c","d","e")

我正在使用另一个索引向量更改顺序(这是必不可少的):

sortvect<-c(2,3,5,4,1)
test2<-test[sortvect]
Run Code Online (Sandbox Code Playgroud)

之后我做了一些操作test2,之后我想切换回初始订单,有sortvect:

test<-give_my_order_back(test2,sortvect)

我尝试过test2[sortvect],test2[rev(sortvect)]但解决方案明显不同.

sorting r

6
推荐指数
2
解决办法
923
查看次数

是否可以使 `__init__.py` 中的导入对 python `help()` 命令可见?

假设我有一个模块:

mymodule/example.py

def add_one(number):
    return number + 1
Run Code Online (Sandbox Code Playgroud)

mymodule/__init__.py

from .example import *

foo = "FOO"

def bar():
    return 1
Run Code Online (Sandbox Code Playgroud)

现在我在 的根部看到该函数mymodule

>>> import mymodule
>>> mymodule.add_one(3)
4
>>> mymodule.foo
'FOO'
Run Code Online (Sandbox Code Playgroud)

另外,我看到add_one通过dir以下方式导入example

>>> dir(mymodule)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'add_one', 'bar', 'example', 'foo']
Run Code Online (Sandbox Code Playgroud)

但是当我输入时,help(mymodule)我只看到example,foobar,但看不到导入的add_one

Help on package mymodule:

NAME
    mymodule

PACKAGE CONTENTS
    example

FUNCTIONS
    bar() …
Run Code Online (Sandbox Code Playgroud)

python python-import python-packaging

6
推荐指数
1
解决办法
118
查看次数

Tensorflow:根据偶数和奇数索引合并两个二维张量

我想检查批次中的偶数和奇数元素,并在需要时交换它们。我设法得到两个我想交织的张量:

def tf_oplu(x, name=None):   


    even = x[:,::2] #slicing into odd and even parts on the batch
    odd = x[:,1::2]

    even_flatten = tf.reshape(even, [-1]) # flatten tensors 
    #in row-major order to apply function across them

    odd_flatten = tf.reshape(odd, [-1])

    compare = tf.to_float(even_flatten<odd_flatten)
    compare_not = tf.to_float(even_flatten>=odd_flatten)

    #def oplu(x,y): # trivial function  
    #    if x<y : # (x<y)==1
    #       return y, x 
    #    else:
    #       return x, y # (x<y)==0

    even_flatten_new = odd_flatten * compare + even_flatten * compare_not
    odd_flatten_new = odd_flatten * …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

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

使用 MirroredStrategy 时,tensorflow Estimator 是否为工作人员采取不同的批次?

我正在使用 GANEstimator 和 MirroredStrategy 来处理单个实例的多个 GPU。input_fn在我的情况下tf.data.Dataset有以下设置:

dataset = dataset.repeat()
dataset = dataset.shuffle(buffer_size=100)
dataset = dataset.batch(self.batch_size, drop_remainder=True)
dataset = dataset.prefetch(100)
Run Code Online (Sandbox Code Playgroud)

我问这个的原因是我是否需要dataset.shard()手动指定一些东西才能将不同的数据传递给工人?我正在挖掘EstimatorMirroredStrategy的代码,但我不清楚发生了什么。从分布式策略描述中产生了额外的混淆:

MirroredStrategy: This does in-graph replication with synchronous 
training on many GPUs on one machine. Essentially, we create copies of all
variables in the model's layers on each device. We then use all-reduce 
to combine gradients across the devices before applying them 
to the variables to keep …
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorflow-datasets tensorflow-estimator

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

为什么我的 PCA 对旋转和轴交换不是不变的?

我有一个大小为 3x3x3 的体素(np.array),填充了一些值,这个设置对我来说是必不可少的。我想要它的旋转不变表示。对于这种情况,我决定尝试 PCA 表示,它被认为对正交变换不变的其他

为简单起见,我进行了一些轴交换,但万一我弄错了,可以有np.rot90.

我已经将我的 3d 体素解释为一组加权的 3d 立方体点向量,我错误地将其称为“基础”,总共 27 个(所以这是空间中的一些 3d 点,由向量表示,从立方体点获得,由体素缩放值)。

import numpy as np

voxel1 = np.random.normal(size=(3,3,3))
voxel2 =  np.transpose(voxel1, (1,0,2)) #np.rot90(voxel1) #


basis = []
for i in range(3):
    for j in range(3):
        for k in range(3):
            basis.append([i+1, j+1, k+1]) # avoid 0
basis = np.array(basis)


voxel1 = voxel1.reshape((27,1))
voxel2 = voxel2.reshape((27,1))

voxel1 = voxel1*basis # weighted basis vectors
voxel2 = voxel2*basis
Run Code Online (Sandbox Code Playgroud)
print(voxel1.shape)
(27, 3)
Run Code Online (Sandbox Code Playgroud)

然后我对那 27 …

python math numpy voxel pca

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