我正在 TPU 上使用 BERT 运行文本分类任务。我使用了不同的教程来运行我的实验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.