ТенсорФлоу ТПУ | Инициализатор для переменной из конструкции потока управления - PullRequest
0 голосов
/ 02 ноября 2018

Я использую TPU TensorFlow для обучения модели, но когда я пытаюсь преобразовать код в TPU, совместимый с помощью tf.contrib.tpu.rewrite, я получаю ошибку:

ValueError: Инициализатор для генератора переменных / декодера / layer4 / kernel / находится внутри конструкции потока управления, такой как цикл или условное выражение. При создании переменной внутри цикла или условного выражения, в качестве инициализатора используйте лямбду

Я оглянулся, и кажется, что обычно есть оператор if или while, который вызывает ошибку. У меня, однако, нет ничего из этого.

Теперь вот определение переменной (ядро):

def conv1d_transpose(input, filters, kernel_size, strides, activation=None):
  kernel = tf.Variable(tf.zeros(dtype=tf.float32, shape=[kernel_size, filters, input.shape[-1].value]), name='kernel')
  output_shape = [tf.shape(input)[0], strides * tf.shape(input)[1], filters]
  net = tf.contrib.nn.conv1d_transpose(input, filter=kernel, output_shape=output_shape, stride=strides, padding='SAME')
  net = activation(net)
  return net

Я вызываю эту функцию несколько раз. Вот как выглядит вызов внутри функции модели:

  with tf.name_scope("layer4"):
    net = conv1d_transpose(
        net,
        filters=15,
        kernel_size=5,
        strides=2,
        activation=tf.nn.leaky_relu)
    net = tf.concat([net, conv4e], axis=-1)
    net = tf.layers.batch_normalization(net, training=training)

Еще одна вещь, перед тем как вывести ошибку, я получаю предупреждение / ошибку от tpu.replicator:

[[{{node input1}} = TPUReplicatedInputN = 1, T = DT_BOOL]] 2018-11-02 02: 55: 44.242495: E tenorflow / core / common_runtime / executor.cc: 630] Исполнителю не удалось создать ядро. Не найдено: Нет зарегистрированного OpKernel 'TPUReplicatedInput' для устройств ЦП, совместимых с узлом {{node input1}} = TPUReplicatedInputN = 1, T = DT_BOOL , Зарегистрировано:

Однако его довольно сложно отладить, поскольку в нем не указывается имя узла, вызывающего проблему.

Заранее спасибо.

...