Работая над Tensorflow, первым шагом является построение графика данных и использование сеанса для его запуска. Хотя во время моей практики, например, MNIST tutorial. Это во-первых, определяет потерю функции и оптимизатор, со следующими кодами (и модель MLP определяется до этого):Tensorflow: как он тренирует модель?
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) #define cross entropy error function
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean') #define loss
optimizer = tf.train.GradientDescentOptimizer(learning_rate) #define optimizer
global_step = tf.Variable(0, name='global_step', trainable=False) #learning rate
train_op = optimizer.minimize(loss, global_step=global_step) #train operation in the graph
Процесс обучения:
train_step =tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
Вот как В этом случае Tensorflow тренировался. Но мой вопрос в том, как Tensorflow знал, какой вес он должен тренировать и обновлять? Я имею в виду, что в учебных кодексах мы пропускаем только y
до cross_entropy
, но для optimizer
или loss
мы не передавали никакой информации о структуре напрямую. Кроме того, мы используем словарь для подачи пакетных данных до train_step
, но train_step
напрямую не использовали данные. Как Tensorflow знал, где использовать эти данные в качестве входных данных?
На мой вопрос, я думал, что это могут быть все эти переменные или константы хранятся в Тензор. Операции, такие как tf.matmul()
, должны иметь «подкласс» класса операций Tensorflow (я еще не проверял код). Может существовать некоторый механизм для тензорного потока распознавать отношения между тензорами (tf.Variable()
, tf.constant()
) и операциями (tf.mul()
, tf.div()
...). Я думаю, он мог проверить суперкласс tf.xxxx()
, чтобы узнать, является ли он тензором или операцией. Это предположение поднимает мой второй вопрос: должен ли я использовать функцию Tf.xxx Tensorflow, чтобы гарантировать, что shadoworflow может построить правильный график потока данных, даже иногда он более сложный, чем обычные методы Python, или некоторые функции лучше поддерживаются в Numpy, чем Tensorflow?
Мой последний вопрос: Есть ли связь между Tensorflow и C++? Я слышал, что кто-то сказал, что Tensorflow быстрее обычного Python, поскольку он использует C или C++ в качестве бэкэнд. Есть ли какой-либо механизм преобразования для передачи Tensorflow Python кодов на C/C++?
Я также был бы изящным, если бы кто-то мог поделиться некоторыми навыками отладки в кодировании с Tensorflow, так как в настоящее время я просто установил некоторые терминалы (Ubuntu) для проверки каждой части/функций моих кодов.
Вы можете расширить python с помощью библиотек C, так что это один из возможных способов, просто API-интерфейс python для библиотек C. – Marcus
@Marcus Да, это правда. Я задаюсь вопросом о способности Python версии Tensorflow, это быстрее, чем обычная чистая кодировка Python с помощью Numpy или Scipy? –