【发布时间】:2021-01-01 21:05:48
【问题描述】:
我有一个熊猫dataset,其中col1 -> 输入文本(使用预训练的分词器进行文本分词),col2 -> 二进制分类[0,1]。
将其转换为 tensorflow 数据集
dataset = tf.data.Dataset.from_generator(lambda: dataset, output_types=(tf.string, tf.int32))
创建模型
def build_classifier_model():
text_input = tf.keras.layers.Input(shape=(), dtype=tf.string, name='text')
preprocessing_layer = hub.KerasLayer(tfhub_handle_preprocess, name='preprocessing')
encoder_inputs = preprocessing_layer(text_input)
encoder = hub.KerasLayer(tfhub_handle_encoder, trainable=True, name='BERT_encoder')
outputs = encoder(encoder_inputs)
net = outputs['pooled_output']
net = tf.keras.layers.Dropout(0.2)(net)
net = tf.keras.layers.Dense(1, activation=None, name='classifier')(net)
return tf.keras.Model(text_input, net)
classifier_model = build_classifier_model()
fine_tune 模型(伯特)
epochs = 5
steps_per_epoch = tf.data.experimental.cardinality(dataset).numpy()
num_train_steps = steps_per_epoch * epochs
num_warmup_steps = int(0.1*num_train_steps)
init_lr = 3e-5
optimizer = optimization.create_optimizer(init_lr=init_lr,
num_train_steps=num_train_steps,
num_warmup_steps=num_warmup_steps,
optimizer_type='adamw')
模型编译
classifier_model.compile(optimizer=optimizer,
loss=loss,
metrics=metrics)
我开始用循环拟合模型
from tqdm import tqdm
for epoch in range(5):
for step, (x_batch_train, y_batch_train) in tqdm(enumerate(dataset)):
with tf.GradientTape() as tape:
logits = classifier_model(x_batch_train, training=True)
loss_value = loss_fn(y_batch_train, logits)
grads = tape.gradient(loss_value, classifier_model.trainable_weights)
optimizer.apply_gradients(zip(grads, classifier_model.trainable_weights))
print(step)
if step % 200 == 0:
print('loss_value %s: %s' % (step, float(loss_value)))
我在 colab pro 中使用 gpu 运行此程序,执行此训练的单元格冻结并且不训练模型。 输出:
0it [00:00, ?it/s]
请帮助我开始训练我的模型(当我尝试拟合方法时.fit (model.fit())
结果是一样的)
【问题讨论】:
标签: python tensorflow nlp