【发布时间】:2021-12-11 20:46:49
【问题描述】:
我正在尝试将 pandas 数据帧加载到张量数据集中。 列是文本[字符串]和标签[字符串格式的列表]
一行看起来像: 文本:“嗨,我在这里,....” 标签:[0, 1, 1, 0, 1, 0, 0, 0, ...]
每个文本有 17 个标签的概率。
我找不到将数据集加载为数组的方法,并调用 model.fit() 我阅读了很多答案,尝试在 df_to_dataset() 中使用以下代码。
我无法弄清楚我在这个..中缺少什么..
labels = labels.apply(lambda x: np.asarray(literal_eval(x))) # Cast to a list
labels = labels.apply(lambda x: [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # Straight out list ..
# ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list).
打印一行(从返回的数据集中)显示:
({'text': <tf.Tensor: shape=(), dtype=string, numpy=b'Text in here'>}, <tf.Tensor: shape=(), dtype=string, numpy=b'[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0]'>)
当我不使用任何转换时,model.fit 会发送一个异常,因为它不能使用字符串。
UnimplementedError: Cast string to float is not supported
[[node sparse_categorical_crossentropy/Cast (defined at <ipython-input-102-71a9fbf2d907>:4) ]] [Op:__inference_train_function_1193273]
def df_to_dataset(dataframe, shuffle=True, batch_size=32):
dataframe = dataframe.copy()
labels = dataframe.pop('labels')
ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
return ds
train_ds = df_to_dataset(df_train, batch_size=batch_size)
val_ds = df_to_dataset(df_val, batch_size=batch_size)
test_ds = df_to_dataset(df_test, batch_size=batch_size)
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(17, activation='softmax', name='classifier')(net)
return tf.keras.Model(text_input, net)
classifier_model = build_classifier_model()
loss = 'sparse_categorical_crossentropy'
metrics = ["accuracy"]
classifier_model.compile(optimizer=optimizer,
loss=loss,
metrics=metrics)
history = classifier_model.fit(x=train_ds,
validation_data=val_ds,
epochs=epochs)
【问题讨论】:
标签: pandas tensorflow keras tensorflow-datasets