Я хотел бы задать несколько вопросов, связанных с функцией 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 функции, который заменяет конкретный узел в графе для одной конкретной функции». Я не получаю, что такое партикулярный узел в графе, который он заменяет.
Пожалуйста, помогите мне!
Спасибо за ваш комментарий, это действительно полезно, и, пожалуйста, просто проверьте, что я понял, что вы сказали. В первом примере данные data_x будут вводиться и заменять X своим выходом (data_x проходит через уравнение «L»: (tX * w) ** 2), а затем заменяет x своим выходом), и эта замена также произошла в data_t, поскольку L нуждается в data_x и data_t. –
Во втором примере есть два двоеточия. В первом заданном «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? –
Я также видел, что существует только 1 заданная переменная, такая как given = [x, a], что означает любое количество множеств (3 множества или более таких наборов, как заданные = [x, a], [y, b], [z, c ]) может быть возможно? –