【问题标题】:tensorflow network didn't fit张量流网络不适合
【发布时间】: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


    【解决方案1】:

    我认为问题在于您创建数据集的方式。 from_generator 函数期望 generator 作为第一个参数,而不是函数。

    尝试访问一个元素或检查它以查看它是否有效。举个例子:

    next(iter(dataset))
    

    并查看它是否返回第一个样本和标签。

    当你从 pandas DataFrame 创建一个 tensorflow 数据集时,你应该使用 tf.data.Dataset.from_tensor_slices(),这里是一个例子:

    dataset = tf.data.Dataset.from_tensor_slices(dict(dataset))
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多