Разделить тензор на обучающие и тестовые наборы
предположим, я прочитал в текстовом файле, используя TextLineReader
. Есть ли способ разделить это на поезд и тестовые наборы в Tensorflow
? Что-то вроде:
def read_my_file_format(filename_queue):
reader = tf.TextLineReader()
key, record_string = reader.read(filename_queue)
raw_features, label = tf.decode_csv(record_string)
features = some_processing(raw_features)
features_train, labels_train, features_test, labels_test = tf.train_split(features,
labels,
frac=.1)
return features_train, labels_train, features_test, labels_test
4 ответов
как упоминал элхам, вы можете использовать scikit-learn сделать это легко. scikit-learn-это библиотека с открытым исходным кодом для машинного обучения. Есть тонны инструментов для подготовки данных, включая model_selection
модуль, который обрабатывает сравнение, проверка и выбор параметров.
на model_selection.train_test_split()
метод специально разработан, чтобы разбивать на поезд и тесты случайно и процент.
X_train, X_test, y_train, y_test = train_test_split(features,
labels,
test_size=0.33,
random_state=42)
test_size
это процент резервирования для тестирования и random_state
является для семян случайной выборки.
обычно я использую это для предоставления наборов данных поезда и проверки и отдельно сохраняю истинные тестовые данные. Вы могли бы просто запустить train_test_split
дважды, чтобы сделать это хорошо. Т. е. разделите данные на (поезд + проверка) и тест, затем разделите поезд + проверка на два отдельных тензора.
import sklearn.model_selection as sk
X_train, X_test, y_train, y_test =
sk.train_test_split(features,labels,test_size=0.33, random_state = 42)
мне удалось получить хороший результат, используя функции карты и фильтра tf.данные.API для набора данных. Просто используйте функцию карты для случайного выбора примеров между поездом и тестированием. Для этого вы можете для каждого примера получить выборку из равномерного распределения и проверить, находится ли значение выборки ниже деления скорости.
def split_train_test(parsed_features, train_rate):
parsed_features['is_train'] = tf.gather(tf.random_uniform([1], maxval=100, dtype=tf.int32) < tf.cast(train_rate * 100, tf.int32), 0)
return parsed_features
def grab_train_examples(parsed_features):
return parsed_features['is_train']
def grab_test_examples(parsed_features):
return ~parsed_features['is_train']