我有一个数据框,该数据框由一列文本和三个要基于此文本预测的目标列组成。
我可以使用以下代码轻松预测其中一个目标:
a == a.min()
如何更改tf.data.Dataset.from_tensor_slices以具有多个目标?
类似的东西:
dataset = tf.data.Dataset.from_tensor_slices((df['text'],
df['feature1'].values.astype(int)
))
tokenizer = tfds.features.text.Tokenizer()
vocabulary_set = set()
for text_tensor, _ in dataset:
some_tokens = tokenizer.tokenize(text_tensor.numpy())
vocabulary_set.update(some_tokens)
vocab_size = len(vocabulary_set)
encoder = tfds.features.text.TokenTextEncoder(vocabulary_set)
def encode(text_tensor, label):
encoded_text = encoder.encode(text_tensor.numpy())
return encoded_text, label
def encode_map_fn(text, label):
return tf.py_function(encode, inp=[text, label], Tout=(tf.int64, tf.int64))
encoded_dataset = dataset.map(encode_map_fn)
BUFFER_SIZE = 50000
BATCH_SIZE = 64
TAKE_SIZE = 500
train_data = encoded_dataset.shuffle(BUFFER_SIZE).skip(TAKE_SIZE)
train_data = train_data.padded_batch(BATCH_SIZE, padded_shapes=([-1],[]))
test_data = encoded_dataset.take(TAKE_SIZE)
test_data = test_data.padded_batch(BATCH_SIZE, padded_shapes=([-1],[]))
vocab_size += 1
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(vocab_size, 2048))
model.add(tf.keras.layers.GlobalAveragePooling1D())
model.add(tf.keras.layers.Dense(2048, activation='tanh'))
model.add(tf.keras.layers.Dropout(.2))
model.add(tf.keras.layers.Dense(2048, activation='tanh'))
model.add(tf.keras.layers.Dropout(.2))
model.add(tf.keras.layers.Dense(16, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_data, epochs=50, validation_data=test_data)
似乎不起作用。
我希望在模型的末尾具有三个独立的softmax输出,分别与我要预测的三个功能相对应。