Как создать общие переменные Theano на GPU? - PullRequest
0 голосов
/ 09 января 2019

Я использую Theano для обучения моей модели на машине с Linux. Код хорошо работает на процессоре, но имеет ошибку при переключении обратно на графический процессор на той же машине: AttributeError: 'TensorVariable' object has no attribute 'get_value'.

Я считаю, что один из параметров, созданный из массива numpy, не является общей переменной, но вместо этого является нормальным TensorVariable, если я запускаю его на GPU. Но нет такой проблемы в процессоре. Я столкнулся с той же проблемой на CPU раньше, я исправил ее, приведя массив numpy к тому же типу с плавающей запятой theano.config.floatX. Но я не знаю, как решить эту проблему.

Конфигурация

Файл конфигурации ~/.theanorc выглядит так:

[global]
floatX = float32
device = cuda

Я использую Python3, и среда графического процессора для Theano уже настроена.

код

Функция theano.shared не создает общую переменную массива графического процессора, а обычную тензорную переменную. Код, который я использую:

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

выход

На графическом процессоре:

тип (self.one_matrix): <class 'theano.tensor.var.TensorVariable'>

тип (one_matrix): <class 'numpy.ndarray'>

one_matrix.dtype: float32

Мне интересно, как я могу создать общую переменную из массива numpy. Что мне нужно сделать, чтобы этот код работал и на GPU? Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 10 января 2019

Просто измените мой код, так как это заставляет его работать, хотя я не уверен, почему.

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