Операция типа Placeholder X не поддерживается в TPU.Выполнение не удастся, если эта операция используется в графе - PullRequest
0 голосов
/ 01 мая 2019

Я выполняю задачу классификации текста, используя BERT на TPU. Я использовал различные учебные пособия для проведения экспериментов: 1 , 2 , 3 и 4 . Единственным отличием от второго примера было то, что мой набор данных не был одним из предопределенных наборов данных в процессорах Bert, поэтому мне пришлось загрузить его и предварительно обработать самому. Кроме того, я хотел внести некоторые изменения в create_model, поэтому мне пришлось записать его следующим образом:

 def create_model(is_training, input_ids, input_mask, segment_ids, labels,
             num_labels, bert_hub_module_handle):
 tags = set()
  if is_training:
    tags.add("train")
  bert_module = hub.Module(bert_hub_module_handle, tags=tags, trainable=True)
  bert_inputs = dict(
      input_ids=input_ids,
      input_mask=input_mask,
      segment_ids=segment_ids)
  bert_outputs = bert_module(
      inputs=bert_inputs,
      signature="tokens",
      as_dict=True)


  output_layer = bert_outputs["pooled_output"]

  hidden_size = output_layer.shape[-1].value

  output_weights = tf.get_variable(
      "output_weights", [num_labels, hidden_size],
      initializer=tf.truncated_normal_initializer(stddev=0.02))

  output_bias = tf.get_variable(
      "output_bias", [num_labels], initializer=tf.zeros_initializer())

  with tf.variable_scope("loss"):
    if is_training:
      # I.e., 0.1 dropout
      output_layer = tf.nn.dropout(output_layer, keep_prob=0.9)

    logits = tf.matmul(output_layer, output_weights, transpose_b=True)
    logits = tf.nn.bias_add(logits, output_bias)
    probabilities = tf.nn.softmax(logits, axis=-1)
    log_probs = tf.nn.log_softmax(logits, axis=-1)

    one_hot_labels = tf.one_hot(labels, depth=num_labels, dtype=tf.float32)

    per_example_loss = -tf.reduce_sum(one_hot_labels * log_probs, axis=-1)
    tf_loss = tf.losses.softmax_cross_entropy(onehot_labels=one_hot_labels,
    logits=log_probs,
    weights=1.0)
    loss = tf.reduce_mean(per_example_loss)

    return (tf_loss, loss, per_example_loss, logits, probabilities)

Когда я запускаю код с моим create_model, я вижу много ошибок, в то время как нет проблем с обучением, и все идет хорошо, но я не уверен, что: 1. модель использует TPU или нет из-за следующие ошибки, 2. модель использует Bert и точно настраивает ее из-за следующих ошибок для всех функций create_model. Любая идея? Вот ошибка (миллионы раз для всех функций):

Operation of type Placeholder X is not supported on the TPU. Execution will fail if this op is used in the graph.

...