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 如何在GPU中并行运行Tensorflow上的独立循环_Python_Tensorflow_Gpu_Parallels_Logistics - Fatal编程技术网

Python 如何在GPU中并行运行Tensorflow上的独立循环

Python 如何在GPU中并行运行Tensorflow上的独立循环,python,tensorflow,gpu,parallels,logistics,Python,Tensorflow,Gpu,Parallels,Logistics,我想通过仿真实现重构受限玻尔兹曼机器的算法。M是可见变量的数量,N是隐藏变量的数量。为了在GPU上并行运行,我想首先使用python在tensorflow上编写它 在我的主要函数RBMIC()中,我需要运行带有L1惩罚的M独立逻辑回归,并更新我的权重和偏差矩阵:(w和b),然后使用它们来估算隐藏变量的值。所以我写了一个独立的for循环。我想知道tensorflow是否能够识别出独立的for循环,并在GPU上高效地运行它(每个核心有一次迭代) 代码也非常慢,特别是对于运行logistics Ret

我想通过仿真实现重构受限玻尔兹曼机器的算法。M是可见变量的数量,N是隐藏变量的数量。为了在GPU上并行运行,我想首先使用python在tensorflow上编写它

  • 在我的主要函数RBMIC()中,我需要运行带有L1惩罚的M独立逻辑回归,并更新我的权重和偏差矩阵:(w和b),然后使用它们来估算隐藏变量的值。所以我写了一个独立的for循环。我想知道tensorflow是否能够识别出独立的for循环,并在GPU上高效地运行它(每个核心有一次迭代)

  • 代码也非常慢,特别是对于运行logistics Returnal,因为它需要运行epochs=1000次以最小化损失函数。但是我发现如果我使用sklearn.linear\u model.LogisticRegression,速度非常快。为什么会有很大的不同?但是为了使用GPU,我仍然想使用tensorflow来编写逻辑回归。有谁能给我一些关于如何更有效地写作的建议吗

  • 当我编写Logistic回归函数:LogisticsReg()时,我需要得到权重和偏差,还需要它们作为tensorflow变量保留,以便进一步计算。但根据我的函数:LogisticsReg(),它在sess.run()之后返回非张量变量。所以我再次把它们转换成张量变量。这部分合理吗?或者有没有有效的方法将其保持在张量变量中,然后用于更新权重和偏差矩阵(w和b)?谢谢你的建议

  • 我对tensorflow和python非常陌生。很抱歉打扰您,谢谢您抽出时间

    将numpy导入为np
    导入tensorflow作为tf
    n=200
    M=4
    N=2
    μ,σ=0,0.1
    β=0.001
    lr=0.05
    纪元=1000
    Maxepochs=10
    迭代=100
    可见=np.数组([[1,0,1,0],[0,1,1,0],[1,0,0,1],[0,1,0,1])
    vis=np。瓷砖(可见,50)。重塑(n,M)
    vis=tf.cast(vis,tf.32)
    err_hat=np.zero([迭代])
    def Bionimal(x):
    样本=tf.其中(tf.随机_均匀(形状=x.形状)-x<0,
    tf.one(shape=x.shape),tf.zero(shape=x.shape))
    回样
    def LogisticsReg(X、Y、wj、bj、beta、lr、epochs):
    logitj=tf.add(tf.matmul(X,wj),bj)
    损失=tf.reduce\u均值(tf.nn.sigmoid\u交叉\u熵\u与logits(labels=Y,logits=logitj))
    l1_正则化子=tf.reduce_和(tf.abs(wj))
    损耗=tf.减少平均值(损耗+β*l1正则化器)
    优化器=tf.train.GradientDescentOptimizer(学习率=lr).最小化(损失,变量列表=[wj,bj])
    使用tf.Session()作为sess:
    tf.global_variables_initializer().run()
    对于范围内的k(历次):#对模型n#u历次进行训练
    _,bf,wf=sess.run([optimizer,bj,wj])
    #bf=tf.变量(bf,name=“bf”)
    #wf=tf.Variable(wf,name=“wf”)
    返回[bf,wf]
    def更新(wi、hi、c_opt、Maxepochs):
    ph=tf.sigmoid(tf.add(tf.matmul(vis,tf.transpose(wi)),c_opt))
    lik=tf.add(tf.multiply(hi,tf.log(ph)),tf.multiply((1.-hi),tf.log(1.-ph)))
    loss2=-tf.减少总和(lik)
    optimizer=tf.contrib.opt.ScipyOptimizerInterface(loss2,var_to_bounds={c_opt:(-1,1)},options={'maxiter':Maxepochs},var_list=[c_opt])
    使用tf.Session()作为sess:
    tf.global_variables_initializer().run()
    优化程序。最小化(sess)
    返回sess.run(c_opt)
    #首字母
    w=tf.Variable(tf.random_normal(shape=(N,M),stddev=0.1),name=“weights”)
    c=tf.Variable(tf.random_normal(shape=(1,N),stddev=0.1),name=“hbias”)
    b=tf.Variable(tf.random_normal(shape=(1,M),stddev=0.1),name=“vbias”)
    def RBMIC(w、c、vis):
    #计算隐藏变量
    logits=tf.add(tf.matmul(vis,tf.transpose(w)),tf.tile(c[n,1]))
    prob=tf.sigmoid(logits)
    hids=生物动物(prob)
    #通过物流回归和l1惩罚估计偏差、权重,以及可见变量的偏差c。
    bs=np.零([1,M])
    ws=np.zero([N,M])
    X=hids
    对于范围内的j(M):
    Y=tf.重塑(vis[:,j],[n,1])
    wj=tf.Variable(tf.reformate(w[:,j],[N,1]),name=“wj”)
    bj=tf.Variable(tf.random_normal(shape=[1,1],stddev=0.1),name=“bj”)
    bf,wf=LogisticsReg(X,Y,wj,bj,beta,lr,历代)
    bs[0,j]=bf
    ws[:,[j]]=wf
    b=tf.cast(tf.Variable(bs,name=“vbias”),tf.float32)
    w=tf.cast(tf.Variable(ws,name=“weights”),tf.float32)
    cs=np.零([1,N])
    对于范围(N)中的i:
    wi=tf.重塑(w[i,:],[1,M])
    hi=tf.重塑(hids[:,i],[n,1])
    c_opt=tf.Variable(c[0,i],name=“c_opt”)
    cs[0,i]=UpdateC(wi,hi,c_opt,Maxepochs)
    c=tf.cast(tf.Variable(cs,name=“hbias”),tf.float32)
    #评估绩效
    vis_pred=tf.sigmoid(tf.add(tf.matmul(hids,w),tf.tile(b[n,1]))
    误差=tf.减少总和((相对于前)**2)
    返回错误
    对于步进范围(迭代):#训练模型迭代次数
    err=RBMIC(w、c、vis)
    init=tf.global_variables_initializer()
    sess=tf.Session()
    sess.run(初始化)
    打印“在步骤%d处重建=\n%”(步骤)
    
    print sess.run(err)
    要回答文章标题中的问题,控制流构造支持迭代的并行执行(通过关键字参数
    parallel_iterations
    公开)

    关于第二个和第三个问题,您可能不想创建多个会话。例如,如果使用单个会话,就不必将张量转换为变量。我强烈建议您参考教程和文档,以获取有关TensorFlow语义的更多信息