- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
老实说,我想弄清楚如何将数据集(格式:pandas DataFrame
或 numpy 数组)转换为一种简单的文本分类 tensorflow 模型可以训练进行情感分析的形式。我使用的数据集类似于 IMDB(包含文本和标签(正面或负面))。我看过的每个教程要么以不同的方式准备数据,要么不理会数据准备而将其留给您的想象。 (例如,所有 IMDB 教程都从 BatchDataset
导入预处理的 Tensorflow tensorflow_datasets
,这在我使用自己的数据集时没有帮助)。我自己尝试转换 Pandas DataFrame
到 Tensorflow 的 Dataset
类型在训练期间导致 ValueErrors 或负损失。任何帮助,将不胜感激。
我最初准备的数据如下,其中training
和 validation
已经洗牌的 Pandas DataFrame
s 包含 text
和 label
列:
# IMPORT STUFF
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf # (I'm using tensorflow 2.0)
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.text import Tokenizer
import pandas as pd
import numpy as np
# ... [code for importing and preparing the pandas dataframe omitted]
# TOKENIZE
train_text = training['text'].to_numpy()
tok = Tokenizer(oov_token='<unk>')
tok.fit_on_texts(train_text)
tok.word_index['<pad>'] = 0
tok.index_word[0] = '<pad>'
train_seqs = tok.texts_to_sequences(train_text)
train_seqs = tf.keras.preprocessing.sequence.pad_sequences(train_seqs, padding='post')
train_labels = training['label'].to_numpy().flatten()
valid_text = validation['text'].to_numpy()
valid_seqs = tok.texts_to_sequences(valid_text)
valid_seqs = tf.keras.preprocessing.sequence.pad_sequences(valid_seqs, padding='post')
valid_labels = validation['label'].to_numpy().flatten()
# CONVERT TO TF DATASETS
train_ds = tf.data.Dataset.from_tensor_slices((train_seqs,train_labels))
valid_ds = tf.data.Dataset.from_tensor_slices((valid_seqs,valid_labels))
train_ds = train_ds.shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
valid_ds = valid_ds.batch(BATCH_SIZE)
# PREFETCH
train_ds = train_ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
valid_ds = valid_ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
PrefetchDataset
或
<PrefetchDataset shapes: ((None, None, None, 118), (None, None, None)), types: (tf.int32, tf.int64)>
.
model = keras.Sequential([
layers.Embedding(vocab_size, embedding_dim),
layers.GlobalAveragePooling1D(),
layers.Dense(1, activation='sigmoid') # also tried activation='softmax'
])
model.compile(optimizer='adam',
loss='binary_crossentropy', # binary_crossentropy
metrics=['accuracy'])
history = model.fit(
train_ds,
epochs=1,
validation_data=valid_ds, validation_steps=1, steps_per_epoch=BUFFER_SIZE)
train_ds
类型为
BatchDataset
或
<BatchDataset shapes: ((None, 118), (None,)), types: (tf.int32, tf.int64)>
,但这也给我带来了负损失和 0 的准确度。
x, y = training['text'].to_numpy(), training['label'].to_numpy()
x, y = tf.convert_to_tensor(x),tf.convert_to_tensor(y)
x
和
y
属于
EagerTensor
类型,但我似乎无法弄清楚如何批处理
EagerTensor
.
train_ds
?我错过了什么或做错了什么?
model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
history = model.fit(train_data.shuffle(10000).batch(512),
epochs=20,
validation_data=validation_data.batch(512),
verbose=1)
train_data
形式为
tensorflow.python.data.ops.dataset_ops._OptionsDataset
, 和
train_data.shuffle(1000).batch(512)
是
tensorflow.python.data.ops.dataset_ops.BatchDataset
(或
<BatchDataset shapes: ((None,), (None,)), types: (tf.string, tf.int64)>
)。
train_data.shuffle(10000).batch(512)
工作但我的
train_ds
不行?
Embedding
层,或标记化,但我不太确定是这种情况。我已经看过以下教程以获得灵感:
最佳答案
更新:我发现问题在于我忽略了将目标标签转换为 0 和 1 以获得二元交叉熵。该问题与转换为 Tensorflow 数据集类型无关。我上面的代码可以很好地完成这个任务。
关于tensorflow - 如何从 Pandas DataFrame 到用于 NLP 的 Tensorflow BatchDataset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58362316/
Tensorflow:将 PrefetchDataset 转换为 BatchDataset 使用最新的 Tensorflow 版本 2.3.1,我正在尝试遵循以下基本文本分类示例:https://ww
使用 TensorFlow 遍历目录并拍摄我想用于训练 NN 的图像。 train_ds = tf.keras.preprocessing.image_dataset_from_directory(
我正在使用 TF 2.3 中的 tf.keras.preprocessing.image_dataset_from_directory 从目录加载图像(训练/测试拆分)。我得到的是一个具有形状的 tf
老实说,我想弄清楚如何将数据集(格式:pandas DataFrame 或 numpy 数组)转换为一种简单的文本分类 tensorflow 模型可以训练进行情感分析的形式。我使用的数据集类似于 IM
我正在关注 TensorFlow starter guide .它特别指出要在鸢尾花(花)分类的示例项目上启用即时执行。 Import the required Python modules, inc
我是一名优秀的程序员,十分优秀!