В чем разница между сохранением кода Tensorflow «простым» или явным программированием вычислительного графика?

#python #tensorflow #keras

#python #tensorflow #keras

Вопрос:

Я изучаю Tensorflow для кодирования NN, и я столкнулся с тем, что существует два общих «подхода» к программированию NN в Tensorflow, и я хотел бы знать, в чем разница.

Существует этот простой способ, используя предопределенные функции и параметры в Tensorflow (например):

 import tensorflow as tf
import numpy as np
from tensorflow import keras

xs = np.array([1, 2, 3, 4, 5, 6], dtype=int)
ys = np.array([1.0, 1.5, 2.0, 2.5, 3.0, 3.5], dtype=float)
model = keras.Sequential([
    keras.layers.Dense(units=1, input_shape=[1])
])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(xs, ys, epochs=500)
  

Другой способ заключается в определении вычислительного графика, использовании заполнителей, явном определении функций потерь, пакетов и т. Д. Что-то вроде этого:

 x = tf.placeholder(..., dtype='float')
y = tf.placeholder(..., dtype='float')

...

with tf.Session() as sess:
    sess.run(init)
    opt = sess.run(optimizer, ...)
    loss, acc = sess.run([cost, accuracy], ...)

  

(Аналогично тому, что можно найти в этом руководстве: https://www.datacamp.com/community/tutorials/cnn-tensorflow-python )

В чем разница между этими двумя подходами? Почти во всех вопросах в руководствах stackoverflow или Tensorflow используется второй подход, но первый довольно проще (фактически, используется в курсе Tensorflow от deeplearning.ai в Coursera).

Ответ №1:

В прежние времена версия Tensorflow не поддерживала динамические вычисления, поэтому вам приходилось строить график (просто простое слово для переменных и констант), а затем выполнять вычисления внутри «сеанса». это было решено с помощью Tensorflow 2.0, который ввел быстрое выполнение Tensorflow

Keras — это просто высокий уровень в верхней части Tensorflow, поэтому вам лучше сравнивать быстрое выполнение с вычислением в режиме сеанса, а не Keras с «сеансом»

Ответ №2:

Первый подход проще, и вы должны его использовать, особенно если вы новичок в этой области и / или в этих инструментах. Он использует Keras, который теперь является высокоуровневым API для Tensorflow, предназначенным для упрощения NN-программирования. Вам понадобится код второго типа только для очень специфических задач, для которых Keras слишком высокоуровневый.

Второй подход — «исторический», который соответствует использованию только ядра Tensorflow. Во многих документах он используется, потому что Keras не существовал, и даже после его создания потребовалось некоторое время, чтобы стать стандартным способом доступа к TF и быть включенным в TF, поэтому многие люди не использовали его, а некоторые из них до сих пор не перешли наKeras.