2015-10-19 4 views
2

Я хотел бы задать несколько вопросов, связанных с функцией anano.Я хочу понять функцию anano (данные, обновления)

1.I видел сценарий, в котором входная переменная не была назначена. Если да, то как он работает?

import theano.tensor as T 
import theano 
# Define symbolic variables 
X = T.matrix('X') 
w = theano.shared([0.1, 0.1], name='w') 
t = T.vector('t') 
# Define Loss Expression 
L = (t-X*w)**2 
# Calculate Gradient Expression 
dLdw = T.grad(L, w) 
# Compile the training function 
lr = 0.1 
data_X = theano.shared([[0.1, 0.2], [0.2, 0.3], [0.1, 0.4], [0.2, 0.4]]) 
data_t = theano.shared([3, 3.5, 4, 4.2]) 
calc_output = theano.function([], L, 
    updates=[(w, w - lr*dLdw)], givens=[(X,data_X), (t,data_t)]) 
for epoch in xrange(100): 
calc_output() 

Как вы можете видеть выше, входная квадратная скобка пуста. Что тогда вводится в этом случае?

2. Когда дело доходит до параметра «заданный» в функции, это немного сложно понять. Люди говорят, что это для ускорения процесса GPU, но я хотел бы знать, какие именно переменные должны быть назначены для «данного». Пожалуйста, ознакомьтесь с приведенным ниже скриптом.

index = T.scalar('index') 
test_model = theano.function(inputs=[index], 
outputs=classifier.errors(y), 
    givens={ 
     x: test_set_x[index * batch_size: (index + 1) * batch_size], 
     y: test_set_y[index * batch_size: (index + 1) * batch_size]}) 

validate_model = theano.function(inputs=[index], 
    outputs=classifier.errors(y), 
    givens={ 
     x: valid_set_x[index * batch_size:(index + 1) * batch_size], 
     y: valid_set_y[index * batch_size:(index + 1) * batch_size]}) 

В данном случае, что x и y делают? какой двоеточие (:) означает? Насколько я знаю, (на домашней странице anano говорится: givens (перебирается по парам (Var1, Var2) переменных. List, tuple или dict. Var1 и Var2 в каждой паре должны иметь один и тот же тип.) - конкретные замены для создания в графе вычислений (Var2 заменяет Var1).) ему нужны 2 переменные, но в первом примере четыре переменные, а второй - довольно сложный для меня. Может ли кто-нибудь сказать мне, что конкретно дает конкретная информация? И объясните, что происходит с 2-м скриптом в данных переменных.

Кроме того, на домашней странице говорится: «Вы можете использовать параметр givens функции, который заменяет конкретный узел в графе для одной конкретной функции». Я не получаю, что такое партикулярный узел в графе, который он заменяет.

Пожалуйста, помогите мне!

ответ

1

Во-первых, это означает, что является реальным значением переменной T. IF в givens есть (x, a), а a - np.array, тогда он будет использовать a для замены x при его вычислении, также в данном случае, если есть x: a, это означает одно и то же. В первом примере data_X - это вход, просто не заданный в первом параметре, но в givens, что то же самое. Во втором примере test_set_x является anano.shared, что означает, что его значение уже существует, это матрица. Но какую часть из них вы будете использовать, вы будете выбирать по индексу, который является входом.

+0

Спасибо за ваш комментарий, это действительно полезно, и, пожалуйста, просто проверьте, что я понял, что вы сказали. В первом примере данные data_x будут вводиться и заменять X своим выходом (data_x проходит через уравнение «L»: (tX * w) ** 2), а затем заменяет x своим выходом), и эта замена также произошла в data_t, поскольку L нуждается в data_x и data_t. –

+0

Во втором примере есть два двоеточия. В первом заданном «x: valid_set_x [index * batch_size: (index + 1) * batch_size», это (valid_set_x [index * batch_size: (index + 1) * batch_size), а «x» заменен на один? он запутан, потому что вход уже назначен: input = ['index']. Я не понимаю, что это 'index * batch_size: (index + 1) * batch_size' part делает ... допустим, batch_sizeis равно 100, тогда это означает 'test_set_x [100: 200]', поэтому замените этот test_set_x как x после его завершения через выход: classifier.errors? –

+0

Я также видел, что существует только 1 заданная переменная, такая как given = [x, a], что означает любое количество множеств (3 множества или более таких наборов, как заданные = [x, a], [y, b], [z, c ]) может быть возможно? –

Смежные вопросы