2016-01-26 6 views
1

Учитывая вектор v длины говорят 30, может инструменты автоматического дифференцирования, скажем Theano или tensorflow быть в состоянии взять градиент чего-то вроде этого:Может ли автоматическая дифференциация обрабатывать отдельные функции срезов массива?

x = np.random.rand(5, 1) 
v = f(x, z) 
w = v[0:25].reshape(5, 5) 
y = g(np.matmul(w, x) + v[25:30]) 
minimize (|| y - x ||) 

ли это даже иметь смысл? Как я это себе представляю, мне нужно было бы сделать некоторые умножения с помощью векторов/матриц идентичности с завершающими 0 для преобразования v --> w

ответ

3

Операции среза и изменения вписываются в стандартные рамки AD в обратном режиме так же, как и любые другие операционные системы. Ниже приведена простой TensorFlow программа, которая похожа на пример, вы дали (мне пришлось изменить пару вещей, чтобы сделать матч размеров), и полученными в результате вычисления график градиента

def f(x, z): 
    """Adds values together, reshapes into vector""" 
    return tf.reshape(x+z, (5,)) 

x = tf.Variable(np.random.rand(5, 1)) 
z = tf.Variable(np.random.rand(5, 1)) 
v = f(x, z) 
w = tf.slice(v, 0, 5) 
w = tf.reshape(v, (5, 1)) 
y = tf.matmul(tf.reshape(w, (5, 1)), tf.transpose(x)) + tf.slice(v, 0, 5) 
cost = tf.square(tf.reduce_sum(y-x)) 
print tf.gradients(cost, [x, z]) 

enter image description here

+0

Awesome, Спасибо! Мне действительно нужно попасть на борт с тензором! – bge0