如何在GPU上创建Theano共享变量?

时间:2019-01-09 09:29:23

标签: python linux gpu theano

我正在使用Theano在Linux机器上训练我的模型。该代码在CPU上运行良好,但是在同一台机器import re with open('demo.csv', 'r') as f, open("Result_csv.csv", 'w+') as out: for line in f: if re.search('/tcp|/udp', line): print(line) out.write(line) 上切换回GPU时出错。

我发现从AttributeError: 'TensorVariable' object has no attribute 'get_value'数组构造的参数之一不是共享变量,但是如果我在GPU上运行它则是普通的numpy。但是,CPU中没有这样的问题。之前,我在CPU上遇到过同样的问题,我通过将numpy数组强制转换为相同的浮点类型TensorVariable来解决此问题。但是我不知道如何解决这个问题。

配置

配置文件theano.config.floatX如下所示:

~/.theanorc

我正在使用Python3,并且已经为Theano设置了GPU环境。

代码

[global] floatX = float32 device = cuda 函数不是创建GPU数组共享变量,而是普通的张量变量。我使用的代码是:

theano.shared

输出

在GPU上:

type(self.one_matrix):self.one_matrix = theano.shared( np.array(one_matrix, dtype=theano.config.floatX), name="OneMatrix") \ .astype(theano.config.floatX)

type(one_matrix):<class 'theano.tensor.var.TensorVariable'>

one_matrix.dtype:<class 'numpy.ndarray'>

我想知道如何从numpy数组创建共享变量。使该代码也可以在GPU上工作,我需要做些什么?任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

只需修改我的代码即可,因为它可以工作,尽管我不确定为什么。

self.one_matrix = theano.shared(
     one_matrix,
     name="OneMatrix") \
    .astype(theano.config.floatX)