[Перевод] Серия учебных пособий: Как перенести код на TensorFlow 1.0

Google машинное обучение искусственный интеллект TensorFlow
[Перевод] Серия учебных пособий: Как перенести код на TensorFlow 1.0

Эта статья взята изПрограмма перевода самородковОрганизуется переводОфициальная документация TensorFlow. Если вам интересно, добро пожаловатьПодать заявку на переводчика, изучив учебник переводчика, участвуйте в переводе и сопоставлении статей и документов. Мы также набираем переводчиков TensorFlow, поэтому, пожалуйста, примите активное участие.


Изменения API в TensorFlow 1.0 больше не являются полностью обратно совместимыми. Поэтому приложения TensorFlow, работающие на TensorFlow 0.n, могут некорректно работать с TensorFlow 1.0. В этом выпуске мы внесли некоторые изменения в API, чтобы обеспечить его внутреннюю согласованность; в течение следующего цикла выпуска 1.N изменений поколений не будет.

Это руководство расскажет вам об основных изменениях в новом API и о том, как автоматически обновить ваши программы до TensorFlow 1.0. Это руководство не только поможет вам внести изменения в программу, но и объяснит, почему мы вносим эти изменения.

Как обновить

Если вы хотите автоматически перенести свой код на версию 1.0, вы можете попробовать нашtf_upgrade.pyсценарий. Этот сценарий будет работать в большинстве случаев, но иногда вам потребуется изменить его вручную. Вы можете найти в нашемGitHubПолучите этот скрипт в формате .

Чтобы преобразовать один исходный файл TensorFlow версии 0.n в версию 1.0, введите команду в следующем формате:

$ python tf_upgrade.py --infile InputFile --outfile OutputFile

Например, следующая команда поместит файл с именемtest.pyПрограмма TensorFlow версии 0.n преобразуется в программу с именемtest_1.0.pyПрограмма TensorFlow версии 1.0:

$ python tf_upgrade.py --infile test.py --outfile test_1.0.py

tf_upgrade.pyСкрипт также создает файл с именемreport.txt, в котором задокументированы все изменения, внесенные в процессе обновления, и предлагаются некоторые изменения вручную, которые вам, возможно, придется внести.

Чтобы обновить весь каталог программ TensorFlow версии 0.n до версии 1.0, введите команду в следующем формате:

$ python tf_upgrade.py --intree InputDir --outtree OutputDir

Например, следующая команда/home/user/coolВсе программы TensorFlow версии 0.n в версии 1.0 преобразуются во вновь созданный/home/user/cool_1.0В каталоге:

$ python tf_upgrade.py --intree /home/user/cool --outtree /home/user/cool_1.0

ограничение

Есть несколько моментов, о которых следует помнить при использовании сценариев для обновления. особенно:

  • вам нужно исправить все вручнуюtf.reverse()пример.tf_upgrade.pyСкрипт также будет выводиться на экранreport.txtФайл предупреждает вас оtf.reverse()Информация.

  • Если вы столкнулись с некоторыми параметрами, которые необходимо изменить,tf_upgrade.pyПостарается отформатировать ваш код минимально, но не изменит автоматически фактический порядок параметров. следовательноtf_upgrade.pyАргументы ключевого слова будут использоваться, чтобы сделать аргументы функции независимыми от порядка.

  • tf.get_variable_scope().reuse_variables()Такие конструкторы потерпят неудачу. Мы рекомендуем удалить их и заменить на:

    with tf.variable_scope(tf.get_variable_scope(), reuse=True):
      ...
    
  • иtf.packиtf.unpackТочно так же мы будемTensorArray.packа такжеTensorArray.unpackпереименован вTensorArray.stackиTensorArray.unstack. но,TensorArray.packиTensorArray.unpackне связанные напрямуюtfпространство имен и, следовательно, не могут быть обнаружены лексически напрямую, например.foo = tf.TensorArray(); foo.unpack(). Поэтому их нужно модифицировать вручную.

Вручную обновите свой код

Вы также можете не использоватьtf_upgrade.py, обновите код вручную. Остальная часть этого документа содержит полный список изменений TensorFlow 1.0, не совместимых с предыдущими версиями.

Переменные

Функции переменных теперь более последовательны и менее понятны.

  • tf.VARIABLES
    • нужно переименовать вtf.GLOBAL_VARIABLES
  • tf.all_variables
    • нужно переименовать вtf.global_variables
  • tf.initialize_all_variables
    • нужно переименовать вtf.global_variables_initializer
  • tf.initialize_local_variables
    • нужно переименовать вtf.local_variables_initializer
  • tf.initialize_variables
    • нужно переименовать вtf.variables_initializer

Агрегатная функция

Все агрегатные функции (Summary functions) теперь унифицированы вtf.summaryв пространстве имен.

  • tf.audio_summary
    • нужно переименовать вtf.summary.audio
  • tf.contrib.deprecated.histogram_summary
    • нужно переименовать вtf.summary.histogram
  • tf.contrib.deprecated.scalar_summary
    • нужно переименовать вtf.summary.scalar
  • tf.histogram_summary
    • нужно переименовать вtf.summary.histogram
  • tf.image_summary
    • нужно переименовать вtf.summary.image
  • tf.merge_all_summaries
    • нужно переименовать вtf.summary.merge_all
  • tf.merge_summary
    • нужно переименовать вtf.summary.merge
  • tf.scalar_summary
    • нужно переименовать вtf.summary.scalar
  • tf.train.SummaryWriter
    • нужно переименовать вtf.summary.FileWriter

Численная разница

Целочисленное подразделение иtf.floordivБудет использоваться семантика этажа. Это позволяетnp.divideиnp.modрезультат сtf.divideиtf.modрезультаты остаются стабильными. Кроме того, мы модифицировалиtf.roundАлгоритм округления, используемый для согласования с NumPy.

  • tf.div

    • разделениеtf.divideСемантика теперь изменена, чтобы соответствовать семантике Python, то есть в Python 3./нотация и деление будущего модуля Python 2 всегда будут приводить к числам с плавающей запятой,//Будет выполнено целочисленное деление. также,tf.divБудет выполнено только целочисленное деление. Чтобы принудительно разделить в стиле усечения в C, используйтеtf.truncatediv.

    • Пожалуйста, попробуйте ввести свой кодtf.divизменить наtf.divide, который последует за семантику Python.

  • tf.mod

    • Излишекtf.modТеперь семантика изменена, чтобы соответствовать семантике Python. Кроме того, операции над целыми числами будут использовать семантику пола. Чтобы принудительно выполнить операцию остатка в стиле усечения в C, используйтеtf.truncatemod.

Сравнение операций деления между новой и старой версиями представлено в следующей таблице:

выражение TF 0.11 (py2) TF 0.11 (py3) TF 1.0 (py2) TF 1.0 (py3)
tf.div(3,4) 0 0 0 0
tf.div(-3,4) 0 0 -1 -1
tf.mod(-3,4) -3 -3 1 1
-3/4 0 -0.75 -1 -0.75
-3/4tf.divide(-3,4) N/A N/A -0.75 -1

Сравнение операций округления между новой и старой версиями представлено в следующей таблице:

входить Python NumPy C++ round() TensorFlow 0.11(floor(x+.5)) TensorFlow 1.0
-3.5 -4 -4 -4 -3 -4
-2.5 -2 -2 -3 -2 -2
-1.5 -2 -2 -2 -1 -2
-0.5 0 0 -1 0 0
0.5 0 0 1 1 0
1.5 2 2 2 2 2
2.5 2 2 3 3 2
3.5 4 4 4 4 4

Соответствие именованию NumPy

В новой версии многие функции переименовываются в соответствии с NumPy. Это сделано для того, чтобы максимально упростить переход между NumPy и TensorFlow. Хотя мы исключили некоторые распространенные несоответствия, теперь есть некоторые функции, которые не совсем совпадают.

  • tf.inv
    • нужно переименовать вtf.reciprocal
    • Это сделано, чтобы предотвратить его использование с функцией инверсии матрицы NumPy.np.invзатемнять
  • tf.list_diff
    • нужно переименовать вtf.setdiff1d
  • tf.listdiff
    • нужно переименовать вtf.setdiff1d
  • tf.mul
    • нужно переименовать вtf.multiply
  • tf.neg
    • нужно переименовать вtf.negative
  • tf.select
    • нужно переименовать вtf.where
    • tf.whereтеперь сnp.whereто же самое, нужно передать 3 или 1 параметр
  • tf.sub
    • нужно переименовать вtf.subtract

Соответствие аргументам NumPy

Параметры некоторых методов TensorFlow 1.0 теперь совпадают с параметрами NumPy. Для этого TensorFlow 1.0 изменил некоторые аргументы ключевых слов и переупорядочил некоторые аргументы. Обратите внимание, что TensorFlow 1.0 больше не используется.dimensionВместо того, чтобы использоватьaxis. TensorFlow 1.0 всегда будет сохранять аргументы тензора первыми в операциях, изменяющих тензоры. (видетьtf.concatизменения).

  • tf.argmax
    • аргументы ключевого словаdimensionнужно переименовать вaxis
  • tf.argmin
    • аргументы ключевого словаdimensionнужно переименовать вaxis
  • tf.concat
    • аргументы ключевого словаconcat_dimнужно переименовать вaxis
    • Входные параметры переупорядочены какtf.concat(values, axis, name='concat').
  • tf.count_nonzero
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.expand_dims
    • аргументы ключевого словаdimнужно переименовать вaxis
  • tf.reduce_all
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_any
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_join
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_logsumexp
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_max
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_mean
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_min
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_prod
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reduce_sum
    • аргументы ключевого словаreduction_indicesнужно переименовать вaxis
  • tf.reverse
    • tf.reverseТребуется передать 1 измерение передboolТензоры типов, используемые для управления порядком измерений, теперь управляются с помощью набора индексов осей.
    • Напримерtf.reverse(a, [True, False, True])теперь нужно изменить наtf.reverse(a, [0, 2])
  • tf.reverse_sequence
    • аргументы ключевого словаbatch_dimнужно переименовать вbatch_axis
    • аргументы ключевого словаseq_dimнужно переименовать вseq_axis
  • tf.sparse_concat
    • аргументы ключевого словаconcat_dimнужно переименовать вaxis
  • tf.sparse_reduce_sum
    • аргументы ключевого словаreduction_axesнужно переименовать вaxis
  • tf.sparse_reduce_sum_sparse
    • аргументы ключевого словаreduction_axesнужно переименовать вaxis
  • tf.sparse_split
    • аргументы ключевого словаsplit_dimнужно переименовать вaxis
    • Входные параметры переупорядочены какtf.sparse_split(keyword_required=KeywordRequired(), sp_input=None, num_split=None, axis=None, name=None, split_dim=None).
  • tf.split
    • аргументы ключевого словаsplit_dimнужно переименовать вaxis
    • аргументы ключевого словаnum_splitнужно переименовать вnum_or_size_splits
    • Входные параметры переупорядочены какtf.split(value, num_or_size_splits, axis=0, num=None, name='split').
  • tf.squeeze
    • аргументы ключевого словаsqueeze_dimsнужно переименовать вaxis
  • tf.svd
    • Входные параметры переупорядочены какtf.svd(tensor, full_matrices=False, compute_uv=True, name=None).

Упрощенное математическое преобразование

Математические операции пакетной версии были удалены. Теперь не пакетная версия функции уже включает в себя функцию пакетной обработки. Например,tf.complex_absфункционал перенесен наtf.abs

  • tf.batch_band_part
    • нужно переименовать вtf.band_part
  • tf.batch_cholesky
    • нужно переименовать вtf.cholesky
  • tf.batch_cholesky_solve
    • нужно переименовать вtf.cholesky_solve
  • tf.batch_fft
    • нужно переименовать вtf.fft
  • tf.batch_fft3d
    • нужно переименовать вtf.fft3d
  • tf.batch_ifft
    • нужно переименовать вtf.ifft
  • tf.batch_ifft2d
    • нужно переименовать вtf.ifft2d
  • tf.batch_ifft3d
    • нужно переименовать вtf.ifft3d
  • tf.batch_matmul
    • нужно переименовать вtf.matmul
  • tf.batch_matrix_determinant
    • нужно переименовать вtf.matrix_determinant
  • tf.batch_matrix_diag
    • нужно переименовать вtf.matrix_diag
  • tf.batch_matrix_inverse
    • нужно переименовать вtf.matrix_inverse
  • tf.batch_matrix_solve
    • нужно переименовать вtf.matrix_solve
  • tf.batch_matrix_solve_ls
    • нужно переименовать вtf.matrix_solve_ls
  • tf.batch_matrix_transpose
    • нужно переименовать вtf.matrix_transpose
  • tf.batch_matrix_triangular_solve
    • нужно переименовать вtf.matrix_triangular_solve
  • tf.batch_self_adjoint_eig
    • нужно переименовать вtf.self_adjoint_eig
  • tf.batch_self_adjoint_eigvals
    • нужно переименовать вtf.self_adjoint_eigvals
  • tf.batch_set_diag
    • нужно переименовать вtf.set_diag
  • tf.batch_svd
    • нужно переименовать вtf.svd
  • tf.complex_abs
    • нужно переименовать вtf.abs

Другие изменения

В дополнение к изменениям, описанным выше, вот некоторые изменения:

  • tf.image.per_image_whitening
    • нужно переименовать вtf.image.per_image_standardization
  • tf.nn.sigmoid_cross_entropy_with_logits
    • Входные параметры переупорядочены какtf.nn.sigmoid_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None).
  • tf.nn.softmax_cross_entropy_with_logits
    • Входные параметры переупорядочены какtf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None).
  • tf.nn.sparse_softmax_cross_entropy_with_logits
    • Входные параметры переупорядочены какtf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None).
  • tf.ones_initializer
    • Его нужно преобразовать в вызов функции, напримерtf.ones_initializer()
  • tf.pack
    • нужно переименовать вtf.stack
  • tf.round
    • tf.roundСемантика теперь такая же, как округление Банкера.
  • tf.unpack
    • нужно переименовать вtf.unstack
  • tf.zeros_initializer
    • Его нужно преобразовать в вызов функции, напримерtf.zeros_initializer()

Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.