генератор наборов данных в тензорном потоке keras
Я делаю классификацию текста и имею набор данных в фрейме данных pandas (с столбцами "текст" и "метка"). Хотите создать функцию-генератор с preprocess_fn внутри. Не знаю, как это сделать. Я погуглил, но все еще неясно. вот что у меня есть:
def tfdata_generator(self, X_train, y_train, is_training, batch_size):
def preprocess_fn(X_train, y_train):
text_list = X_train['text'].values
label_list = y_train['Encoded_Label'].values
# do some preprocessing of text - using bert-tokenizer, lower-case, vocab_file etc.
yield X, y
dataset = tf.data.Dataset.from_generator(preprocess_fn, output_types=(tf.int32, tf.int32))
dataset = dataset.padded_batch(batch_size=batch_size, drop_remainder=True if is_training else False)
dataset = dataset.shuffle(3, reshuffle_each_iteration=True)
dataset = dataset.repeat()
dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE)
return dataset
def training_pipeline(self):
(X_train, y_train), (X_test, y_test) = self.getXy()
training_set = self.tfdata_generator(X_train, y_train, is_training=True, batch_size=_BATCH_SIZE)
testing_set = self.tfdata_generator(X_test, y_test, is_training=False, batch_size=_BATCH_SIZE)
model = self.keras_model() # your keras model here
model.compile('adam', 'categorical_crossentropy', metrics=['acc'])
model.fit(
training_set.make_one_shot_iterator(), #=> I already have a generator. Should I have an iterator here? I think not.
steps_per_epoch=len(X_train) // _BATCH_SIZE,
epochs=self.program_config.getint('parameters', 'num_epochs'),
validation_data=testing_set.make_one_shot_iterator() #=> already have a generator.
validation_steps=len(X_test) // _BATCH_SIZE,
verbose=1)
return model
Я не знаю, верна ли моя функция tfdata_generator. Любые предложения / исправления будут полезны. Кроме того, в model.fit training_set уже будет небольшой партией. Обязательно ли наличие итератора?