Как разбивается выборка для обучения RCNN?
Здраствуйте, помогите понять, пожалуйста.
Мнист взят только для описания ситуации:
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Думаю многие видели эту строку, поажлуйста помогите понять как собрать аналог? У меня дана выборка, два класса. Классификация в тексте, я создал словарь на всю выборку вида: {name_file: num_class}
Как это всё состыковать, и как понять какие пропорции внутри? Я хочу рандом, без всяких наложений.
Далее у меня идёт такая конструкция в коде:
x_train_split, x_val_split, y_train_split, y_val_split = train_test_split(x_train, y_train_cat, test_size=0.2)
model.fit(x_train_split, y_train_split, batch_size=32, epochs=5, validation_data=(x_val_split, y_val_split))
Здесь я разбиваю вручную. Но в голове не проясняется. Как тут вообще понять в каких пропорциях разбивается общая выборка на тестовую и далее на обучающую с валидационной?
Я пролазил туториалки по тензорфлоу, по керасу, и по аугментациям зачем-то. У меня получилось в однмо варианте создать класс, в другом словарь. Но я не понимаю где и в каком месте далее это всё регулируется и при каких обстоятельствах считывается для сравнения результатов на всех этапах.. Ютуб уже закончился. Я даже класс могу в название файла записать, или разбить вручную по папкам. Взять чужой код с каггла и сделать рабочим, но это не даёт понимания.
Upd: Так, стоп. Я же могу применить train_test_split и в первом случае? а как будет выглядеть взаимодействие и код.. со словарём из названия файлов и класса? оно же не преобразуется в вектор нампи и класс? или да? о боже мой .. %(
Ответы (2 шт):
Не совсем понятна суть вопроса. Попробую ответить на то, что понял.
Команда:
x_train_split, x_val_split, y_train_split, y_val_split = \
train_test_split(x_train, y_train_cat, test_size=0.2)
разбивает общую выборку на две части - обучающую 80% и валидационную 20%.
Дальше вы обучаете модель на обучающей выборке (80%) и проверяете качество модели на ваоидационной выборке (20%).
Я нигде не увидел в вашем коде никаких упоминаний о тестовой выборке.
Можно сделать немного по-другому:
разбиваем общую выборку на две части: 90% и 10% (тестовая выборка):
x_train_split, x_test_split, y_train_split, y_test_split = \
train_test_split(x_train, y_train_cat, test_size=0.1)
При обучении модели можно воспользоваться параметром:
validation_split: Float between 0 and 1. Fraction of the training data to be used as validation data. The model will set apart this fraction of the training data, will not train on it, and will evaluate the loss and any model metrics on this data at the end of each epoch. The validation data is selected from the last samples in the
xandydata provided, before shuffling. This argument is not supported whenxis a dataset, generator orkeras.utils.Sequenceinstance.
model.fit(x_train_split, y_train_split, batch_size=32, epochs=5, validation_split=0.2)
т.е. keras откусит 20% от обучающей выборки x_train_split и будет использовать эту часть для валидации модели.
В самом конце вы можете протестировать модель на тестовой выборке, данные из которой модель не видела ни при обучении ни при валидации.
в туториале по тензорфлоу описано почти всё, что меня интересовало) спасибо за внимание
Загрузите массивы NumPy с помощью tf.data.Dataset
Предполагая, что у вас есть массив примеров и соответствующий массив меток, передайте два массива в виде кортежа в tf.data.Dataset.from_tensor_slices чтобы создать tf.data.Dataset
train_dataset = tf.data.Dataset.from_tensor_slices((train_examples, train_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_examples, test_labels))
Перемешайте и пакетируйте наборы данных
BATCH_SIZE = 64
SHUFFLE_BUFFER_SIZE = 100
train_dataset = train_dataset.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE)
test_dataset = test_dataset.batch(BATCH_SIZE)```