У меня есть график вычислений, построенный с помощью Theano. Это выглядит так:
import theano
from theano import tensor as T
import numpy as np
W1 = theano.shared( np.random.rand(45,32).astype('float32'), 'W1')
b1 = theano.shared( np.random.rand(32).astype('float32'), 'b1')
W2 = theano.shared( np.random.rand(32,3).astype('float32'), 'W2')
b2 = theano.shared( np.random.rand(3).astype('float32'), 'b2')
input = T.matrix('input')
hidden = T.tanh(T.dot(input, W1)+b1)
output = T.nnet.softmax(T.dot(hidden, W2)+b2)
Теперь отображение из вектора в вектор. Однако ввод задан как матричный тип, поэтому я могу одновременно передавать множество векторов через отображение. Я занимаюсь машинным обучением, и это делает фазу обучения более эффективной.
Проблема в том, что после этапа обучения я хотел бы просмотреть отображение как вектор в вектор, чтобы я мог вычислить:
jac = theano.gradient.jacobian(output, wrt=input)
jacobian
жалуется, что ввод не TensorType(float32, vector)
. Есть ли способ изменить тип входного тензора без перестройки всего графа вычислений?
input.reshape((-1,))
составляет длинный вектор.input[:, 0]
выбирает первый столбец. ХТН - person eickenberg   schedule 09.10.2014output
. Поток: ввод => материал => вывод. Можно ли вставить изменение формы между вводом и прочим? - person Matt Hancock   schedule 09.10.2014input
всегда является матрицей, но моделируемая неотъемлемая функция является векторной. Я спрашиваю, можно ли изменитьTensorType
изinput
после построения этого графика. - person Matt Hancock   schedule 09.10.20140.6.0
я не получаю эту ошибку. Тем не менее, я получаю один из-за формы вывода, ноjac = theano.gradient.jacobian(output.flatten(), wrt=input)
исправляет это и должно быть в порядке для вас, если вы хотите оценить это одно изображение за раз. Если это не работает для вас, вы можете сделатьinput=T.fvector()
, а затем преобразовать его в скрытую матрицу, используяhidden = T.tanh(T.dot(input.reshape((-1, W1.shape[0])), W1)+b1)
. (Мне любопытно - это для манипулирования входными образцами? :)). Не могли бы вы исправить опечатки в выражениях дляb1
иb2
? - person eickenberg   schedule 09.10.2014output
было одной из проблем. Это было легко исправить, так какoutput
находится в конце цепочки вычислений. Я все еще получал сообщение об ошибке на0.6.0
в отношении формыinput
, но когда я попытался выполнить отдельную установку на отдельной машине с версией0.6.0.dev-RELEASE
,jacobian
отлично работает сoutput.flatten()
иinput
какTensorType(float32, matrix)
. Я предполагаю, что это было недавнее обновление, хотя я не уверен, почему это будет работать в вашем0.6.0
, но не в моем. - person Matt Hancock   schedule 09.10.2014input
должна быть матрицей). После этого я хотел бы измерить якобиан сети о точке. Я не мог сделать это в своем0.6.0
, не установивinput
в качестве типа вектора и не перестроив всю цепочку вычислений. - person Matt Hancock   schedule 09.10.2014